Loading [MathJax]/extensions/tex2jax.js
ATLAS Offline Software
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Public Types | Public Member Functions | Public Attributes | Private Attributes | List of all members
IdDictRange Class Reference

#include <IdDictRange.h>

Inheritance diagram for IdDictRange:
Collaboration diagram for IdDictRange:

Public Types

enum  specification_type {
  unknown, by_value, by_values, by_label,
  by_labels, by_minmax
}
 
enum  continuation_mode {
  none, has_next, has_previous, has_both,
  wrap_around
}
 

Public Member Functions

 IdDictRange ()=default
 
 ~IdDictRange ()=default
 
void resolve_references (const IdDictMgr &idd, IdDictDictionary &dictionary, IdDictRegion &region)
 
void generate_implementation (const IdDictMgr &idd, IdDictDictionary &dictionary, IdDictRegion &region, const std::string &tag="")
 
Range build_range () const
 
virtual void reset_implementation ()
 
virtual bool verify () const
 
virtual void clear ()
 

Public Attributes

std::string m_field_name
 
IdDictFieldm_field {}
 
specification_type m_specification {unknown}
 
std::string m_tag
 
std::string m_label
 
int m_value {}
 
int m_minvalue {}
 
int m_maxvalue {}
 
int m_prev_value {}
 
int m_next_value {}
 
continuation_mode m_continuation_mode {none}
 
std::vector< std::string > m_labels
 
std::vector< int > m_values
 

Private Attributes

bool m_resolved_references {}
 

Detailed Description

Definition at line 18 of file IdDictRange.h.

Member Enumeration Documentation

◆ continuation_mode

Enumerator
none 
has_next 
has_previous 
has_both 
wrap_around 

Definition at line 43 of file IdDictRange.h.

43  {
44  none,
45  has_next,
46  has_previous,
47  has_both,
49  };

◆ specification_type

Enumerator
unknown 
by_value 
by_values 
by_label 
by_labels 
by_minmax 

Definition at line 34 of file IdDictRange.h.

34  {
35  unknown,
36  by_value,
37  by_values,
38  by_label,
39  by_labels,
40  by_minmax
41  } ;

Constructor & Destructor Documentation

◆ IdDictRange()

IdDictRange::IdDictRange ( )
default

◆ ~IdDictRange()

IdDictRange::~IdDictRange ( )
default

Member Function Documentation

◆ build_range()

Range IdDictRange::build_range ( ) const
virtual

Implements IdDictRegionEntry.

Definition at line 124 of file IdDictRange.cxx.

124  {
125  Range result;
126 
128  switch (m_specification) {
129  case by_value:
130  case by_label: {
131  field.set(m_value, m_value);
132  break;
133  }
134 
135  case by_values:
136  case by_labels: {
137  field.set(m_values);
138  break;
139  }
140 
141  case by_minmax: {
143  break;
144  }
145 
146  case unknown: {
147  break;
148  }
149  }
151  field.set(true);
152  } else if (has_previous == m_continuation_mode) {
153  field.set_previous(m_prev_value);
154  } else if (has_next == m_continuation_mode) {
155  field.set_next(m_next_value);
156  } else if (has_both == m_continuation_mode) {
157  field.set_previous(m_prev_value);
158  field.set_next(m_next_value);
159  }
160  result.add(std::move(field));
161  return(result);
162 }

◆ clear()

void IdDictRegionEntry::clear ( )
virtualinherited

Definition at line 29 of file IdDictRegionEntry.cxx.

29  {
30 }

◆ generate_implementation()

void IdDictRange::generate_implementation ( const IdDictMgr idd,
IdDictDictionary dictionary,
IdDictRegion region,
const std::string &  tag = "" 
)
virtual

Reimplemented from IdDictRegionEntry.

Definition at line 63 of file IdDictRange.cxx.

64  {
65  // Add IdDictFieldImplementation to this region
66 
67  // NOTE: we DO NOT protect this method with
68  // m_generated_implementation because the same object may be
69  // called more than once because there are IdDictRangeRef's which
70  // point to the same IdDictRange's.
71 
72  if (Debugger::debug()) {
73  std::cout << "IdDictRange::generate_implementation>" << std::endl;
74  }
75 
76  region.m_implementation.resize(region.m_implementation.size() + 1);
78  impl.set_range(this);
79  if (m_field->m_index == 0) {
80  m_field->m_index = region.fieldSize() - 1;
81  } else if (m_field->m_index != (region.fieldSize() - 1)) {
82  std::cout << "Bad field index for " << m_field_name
83  << " index " << m_field->m_index
84  << " in dictionary " << dictionary.m_name
85  << " region #" << region.m_index
86  << " group " << region.m_group
87  << " tag " << region.m_tag
88  << " size " << (region.m_implementation.size() - 1)
89  << std::endl;
90  }
91 
92  size_t index = region.m_implementation.size() - 1;
93  if (region.m_implementation.size() <= index) {
94  std::cout << "IdDictRange::generate_implementation: index >= impl size - "
95  << index << " " << region.fieldSize()
96  << std::endl;
97  return;
98  }
99 
101  switch (m_specification) {
102  case by_value:
103  case by_label: {
104  impl.set_field(Range::field(m_value, m_value));
105  break;
106  }
107 
108  case by_values:
109  case by_labels: {
110  impl.set_field(Range::field(m_values));
111  }
112  break;
113 
114  case by_minmax:
115  impl.set_field(Range::field(m_minvalue, m_maxvalue));
116  break;
117 
118  case unknown:
119  break;
120  }
121 }

◆ reset_implementation()

void IdDictRegionEntry::reset_implementation ( )
virtualinherited

Reimplemented in IdDictRangeRef, IdDictReference, and IdDictDictionaryRef.

Definition at line 22 of file IdDictRegionEntry.cxx.

22  {
23 }

◆ resolve_references()

void IdDictRange::resolve_references ( const IdDictMgr idd,
IdDictDictionary dictionary,
IdDictRegion region 
)
virtual

The range values were unspecified in the range element.

Therefore, the set of values must be obtained from the field definition (if it exists!!).

If the field is undefined, then too bad, this range will be dummy.

Reimplemented from IdDictRegionEntry.

Definition at line 16 of file IdDictRange.cxx.

17  {
18  if (!m_resolved_references) {
19  m_field = dictionary.find_field(m_field_name);
20  if (m_field == nullptr) {
21  m_field = new IdDictField;
23  dictionary.add_field(m_field);
24  }
25 
26  if (m_specification == unknown) {
36  unsigned int labels = m_field->get_label_number();
37  if (labels == 1) {
40  } else if (labels > 1) {
42  for (size_t i = 0; i < labels; ++i) {
43  m_labels.push_back(m_field->get_label(i));
44  }
45  }
46  }
47 
48  if (m_specification == by_label) {
50  } else if (m_specification == by_labels) {
51  m_values.clear();
52  for (size_t i = 0; i < m_labels.size(); ++i) {
53  const std::string& label = m_labels[i];
55  m_values.push_back(value);
56  }
57  }
58  m_resolved_references = true;
59  }
60 }

◆ verify()

bool IdDictRegionEntry::verify ( ) const
virtualinherited

Reimplemented in IdDictRangeRef, IdDictReference, and IdDictDictionaryRef.

Definition at line 25 of file IdDictRegionEntry.cxx.

25  {
26  return(true);
27 }

Member Data Documentation

◆ m_continuation_mode

continuation_mode IdDictRange::m_continuation_mode {none}

Definition at line 58 of file IdDictRange.h.

◆ m_field

IdDictField* IdDictRange::m_field {}

Definition at line 32 of file IdDictRange.h.

◆ m_field_name

std::string IdDictRange::m_field_name

Definition at line 31 of file IdDictRange.h.

◆ m_label

std::string IdDictRange::m_label

Definition at line 52 of file IdDictRange.h.

◆ m_labels

std::vector<std::string> IdDictRange::m_labels

Definition at line 59 of file IdDictRange.h.

◆ m_maxvalue

int IdDictRange::m_maxvalue {}

Definition at line 55 of file IdDictRange.h.

◆ m_minvalue

int IdDictRange::m_minvalue {}

Definition at line 54 of file IdDictRange.h.

◆ m_next_value

int IdDictRange::m_next_value {}

Definition at line 57 of file IdDictRange.h.

◆ m_prev_value

int IdDictRange::m_prev_value {}

Definition at line 56 of file IdDictRange.h.

◆ m_resolved_references

bool IdDictRange::m_resolved_references {}
private

Definition at line 63 of file IdDictRange.h.

◆ m_specification

specification_type IdDictRange::m_specification {unknown}

Definition at line 50 of file IdDictRange.h.

◆ m_tag

std::string IdDictRange::m_tag

Definition at line 51 of file IdDictRange.h.

◆ m_value

int IdDictRange::m_value {}

Definition at line 53 of file IdDictRange.h.

◆ m_values

std::vector<int> IdDictRange::m_values

Definition at line 60 of file IdDictRange.h.


The documentation for this class was generated from the following files:
IdDictField::m_index
size_t m_index
Definition: IdDictField.h:30
get_generator_info.result
result
Definition: get_generator_info.py:21
IdDictRange::by_minmax
@ by_minmax
Definition: IdDictRange.h:40
index
Definition: index.py:1
IdDictRange::by_label
@ by_label
Definition: IdDictRange.h:38
IdDictRange::m_field_name
std::string m_field_name
Definition: IdDictRange.h:31
IdDictRange::by_labels
@ by_labels
Definition: IdDictRange.h:39
athena.value
value
Definition: athena.py:124
IdDictRange::none
@ none
Definition: IdDictRange.h:44
ReadOfcFromCool.field
field
Definition: ReadOfcFromCool.py:48
IdDictRange::m_specification
specification_type m_specification
Definition: IdDictRange.h:50
IdDictRange::m_field
IdDictField * m_field
Definition: IdDictRange.h:32
IdDictRange::has_previous
@ has_previous
Definition: IdDictRange.h:46
beamspotnt.labels
list labels
Definition: bin/beamspotnt.py:1447
IdDictRegion::m_index
size_t m_index
Definition: IdDictRegion.h:43
IdDictRange::m_maxvalue
int m_maxvalue
Definition: IdDictRange.h:55
lumiFormat.i
int i
Definition: lumiFormat.py:85
IdDictField::m_name
std::string m_name
Definition: IdDictField.h:28
IdDictRange::has_both
@ has_both
Definition: IdDictRange.h:47
IdDictRange::m_prev_value
int m_prev_value
Definition: IdDictRange.h:56
IdDictField::get_label_number
size_t get_label_number() const
Definition: IdDictField.cxx:41
add-xsec-uncert-quadrature-N.label
label
Definition: add-xsec-uncert-quadrature-N.py:104
IdDictRegion::fieldSize
size_t fieldSize() const
Definition: IdDictRegion.cxx:137
IdDictRange::unknown
@ unknown
Definition: IdDictRange.h:35
IdDictRange::m_value
int m_value
Definition: IdDictRange.h:53
Debugger::debug
static bool debug()
Definition: Debugger.h:18
IdDictField::get_label_value
ExpandedIdentifier::element_type get_label_value(const std::string &name) const
Definition: IdDictField.cxx:58
IdDictRegion::m_group
std::string m_group
Definition: IdDictRegion.h:45
master.dictionary
dictionary
Definition: master.py:47
IdDictField::get_label
const std::string get_label(size_t index) const
Definition: IdDictField.cxx:46
IdDictRegion::m_tag
std::string m_tag
Definition: IdDictRegion.h:46
IdDictRange::m_labels
std::vector< std::string > m_labels
Definition: IdDictRange.h:59
IdDictRange::has_next
@ has_next
Definition: IdDictRange.h:45
Range
A Range describes the possible ranges for the field values of an ExpandedIdentifier.
Definition: DetectorDescription/Identifier/Identifier/Range.h:29
IdDictRange::m_continuation_mode
continuation_mode m_continuation_mode
Definition: IdDictRange.h:58
impl
Definition: CaloGPUClusterAndCellDataMonitorOptions.h:46
DeMoScan.index
string index
Definition: DeMoScan.py:364
IdDictRange::m_resolved_references
bool m_resolved_references
Definition: IdDictRange.h:63
IdentifierField
This is the individual specification for the range of one ExpandedIdentifier IdentifierField.
Definition: IdentifierField.h:21
IdDictRange::by_values
@ by_values
Definition: IdDictRange.h:37
IdDictRange::m_label
std::string m_label
Definition: IdDictRange.h:52
IdDictRange::by_value
@ by_value
Definition: IdDictRange.h:36
IdDictField
Definition: IdDictField.h:15
IdDictRange::wrap_around
@ wrap_around
Definition: IdDictRange.h:48
IdDictFieldImplementation
IdDictFieldImplementation is used to capture the specification of a single field of an Identifier.
Definition: IdDictFieldImplementation.h:58
IdDictRegion::m_implementation
std::vector< IdDictFieldImplementation > m_implementation
Definition: IdDictRegion.h:42
IdDictRange::m_minvalue
int m_minvalue
Definition: IdDictRange.h:54
IdDictRange::m_next_value
int m_next_value
Definition: IdDictRange.h:57
IdDictRange::m_values
std::vector< int > m_values
Definition: IdDictRange.h:60