CMS 3D CMS Logo

ParameterDescriptionNode.cc
Go to the documentation of this file.
1 
8 
9 #include <vector>
10 #include <cassert>
11 #include <ostream>
12 
13 #define TYPE_TO_ENUM(type, e_val) \
14  template <> \
15  ParameterTypes ParameterTypeToEnum::toEnum<type>() { \
16  return e_val; \
17  }
18 #define TYPE_TO_NAME(type) \
19  case k_##type: \
20  return #type
21 
22 namespace edm {
23 
24  class EventID;
25  class LuminosityBlockID;
27  class EventRange;
28  class InputTag;
29  class FileInPath;
30 
32  TYPE_TO_ENUM(std::vector<int>, k_vint32)
34  TYPE_TO_ENUM(std::vector<unsigned>, k_vuint32)
35  TYPE_TO_ENUM(long long, k_int64)
36  TYPE_TO_ENUM(std::vector<long long>, k_vint64)
37  TYPE_TO_ENUM(unsigned long long, k_uint64)
38  TYPE_TO_ENUM(std::vector<unsigned long long>, k_vuint64)
40  TYPE_TO_ENUM(std::vector<double>, k_vdouble)
43  TYPE_TO_ENUM(std::vector<std::string>, k_vstring)
45  TYPE_TO_ENUM(std::vector<EventID>, k_VEventID)
47  TYPE_TO_ENUM(std::vector<LuminosityBlockID>, k_VLuminosityBlockID)
49  TYPE_TO_ENUM(std::vector<InputTag>, k_VInputTag)
52  TYPE_TO_ENUM(std::vector<LuminosityBlockRange>, k_VLuminosityBlockRange)
54  TYPE_TO_ENUM(std::vector<EventRange>, k_VEventRange)
55  // These are intentionally not implemented to prevent one
56  // from calling add<ParameterSet>. One should call
57  // add<ParameterSetDescription> instead.
58  // TYPE_TO_ENUM(ParameterSet,k_PSet)
59  // TYPE_TO_ENUM(std::vector<ParameterSet>,k_VPSet)
60 
62  switch (iType) {
63  TYPE_TO_NAME(int32);
64  TYPE_TO_NAME(vint32);
66  TYPE_TO_NAME(vuint32);
67  TYPE_TO_NAME(int64);
68  TYPE_TO_NAME(vint64);
70  TYPE_TO_NAME(vuint64);
71  TYPE_TO_NAME(double);
73  TYPE_TO_NAME(bool);
74  TYPE_TO_NAME(string);
76  TYPE_TO_NAME(EventID);
77  TYPE_TO_NAME(VEventID);
78  TYPE_TO_NAME(LuminosityBlockID);
79  TYPE_TO_NAME(VLuminosityBlockID);
80  TYPE_TO_NAME(InputTag);
81  TYPE_TO_NAME(VInputTag);
82  TYPE_TO_NAME(FileInPath);
83  TYPE_TO_NAME(PSet);
85  TYPE_TO_NAME(LuminosityBlockRange);
86  TYPE_TO_NAME(VLuminosityBlockRange);
87  TYPE_TO_NAME(EventRange);
88  TYPE_TO_NAME(VEventRange);
89  default:
90  assert(false);
91  }
92  return "";
93  }
94 
96  Comment::Comment(std::string const& iComment) : comment_(iComment) {}
97  Comment::Comment(char const* iComment) : comment_(iComment) {}
98 
100 
102 
104 
105  void ParameterDescriptionNode::print(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const {
106  if (hasNestedContent()) {
107  dfh.incrementCounter();
108  }
109  print_(os, optional, writeToCfi, dfh);
110  }
111 
112  void ParameterDescriptionNode::printNestedContent(std::ostream& os, bool optional, DocFormatHelper& dfh) const {
113  if (hasNestedContent()) {
114  dfh.incrementCounter();
115  printNestedContent_(os, optional, dfh);
116  }
117  }
118 
119  void ParameterDescriptionNode::printSpaces(std::ostream& os, int n) {
120  char oldFill = os.fill(' ');
121  os.width(n);
122  os << "";
123  os.fill(oldFill);
124  }
125 
126  // operator>> ---------------------------------------------
127 
128  std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool caseValue, ParameterDescriptionNode const& node) {
129  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
130  return caseValue >> std::move(clonedNode);
131  }
132 
133  std::unique_ptr<ParameterDescriptionCases<int>> operator>>(int caseValue, ParameterDescriptionNode const& node) {
134  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
135  return caseValue >> std::move(clonedNode);
136  }
137 
138  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
139  ParameterDescriptionNode const& node) {
140  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
141  return caseValue >> std::move(clonedNode);
142  }
143 
144  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
145  ParameterDescriptionNode const& node) {
146  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
147  return caseValue >> std::move(clonedNode);
148  }
149 
150  std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool caseValue,
151  std::unique_ptr<ParameterDescriptionNode> node) {
152  return std::unique_ptr<ParameterDescriptionCases<bool>>(
153  new ParameterDescriptionCases<bool>(caseValue, std::move(node)));
154  }
155 
156  std::unique_ptr<ParameterDescriptionCases<int>> operator>>(int caseValue,
157  std::unique_ptr<ParameterDescriptionNode> node) {
158  return std::unique_ptr<ParameterDescriptionCases<int>>(
159  new ParameterDescriptionCases<int>(caseValue, std::move(node)));
160  }
161 
162  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
163  std::unique_ptr<ParameterDescriptionNode> node) {
164  return std::unique_ptr<ParameterDescriptionCases<std::string>>(
165  new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
166  }
167 
168  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
169  std::unique_ptr<ParameterDescriptionNode> node) {
170  std::string caseValueString(caseValue);
171  return std::unique_ptr<ParameterDescriptionCases<std::string>>(
172  new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
173  }
174 
175  // operator&& ---------------------------------------------
176 
177  std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
178  ParameterDescriptionNode const& node_right) {
179  return std::make_unique<ANDGroupDescription>(node_left, node_right);
180  }
181 
182  std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
183  ParameterDescriptionNode const& node_right) {
184  return std::make_unique<ANDGroupDescription>(std::move(node_left), node_right);
185  }
186 
187  std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
188  std::unique_ptr<ParameterDescriptionNode> node_right) {
189  return std::make_unique<ANDGroupDescription>(node_left, std::move(node_right));
190  }
191 
192  std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
193  std::unique_ptr<ParameterDescriptionNode> node_right) {
194  return std::make_unique<ANDGroupDescription>(std::move(node_left), std::move(node_right));
195  }
196 
197  // operator|| ---------------------------------------------
198 
199  std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
200  ParameterDescriptionNode const& node_right) {
201  return std::make_unique<ORGroupDescription>(node_left, node_right);
202  }
203 
204  std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
205  ParameterDescriptionNode const& node_right) {
206  return std::make_unique<ORGroupDescription>(std::move(node_left), node_right);
207  }
208 
209  std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
210  std::unique_ptr<ParameterDescriptionNode> node_right) {
211  return std::make_unique<ORGroupDescription>(node_left, std::move(node_right));
212  }
213 
214  std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
215  std::unique_ptr<ParameterDescriptionNode> node_right) {
216  return std::make_unique<ORGroupDescription>(std::move(node_left), std::move(node_right));
217  }
218 
219  // operator^ ---------------------------------------------
220 
221  std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
222  ParameterDescriptionNode const& node_right) {
223  return std::make_unique<XORGroupDescription>(node_left, node_right);
224  }
225 
226  std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
227  ParameterDescriptionNode const& node_right) {
228  return std::make_unique<XORGroupDescription>(std::move(node_left), node_right);
229  }
230 
231  std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
232  std::unique_ptr<ParameterDescriptionNode> node_right) {
233  return std::make_unique<XORGroupDescription>(node_left, std::move(node_right));
234  }
235 
236  std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
237  std::unique_ptr<ParameterDescriptionNode> node_right) {
238  return std::make_unique<XORGroupDescription>(std::move(node_left), std::move(node_right));
239  }
240 } // namespace edm
void setComment(std::string const &value)
std::ostream & print_(std::ostream &os, value_type const &hash)
Definition: Hash.cc:106
std::istream & operator>>(std::istream &is, FileInPath &fip)
Definition: FileInPath.h:134
void printNestedContent(std::ostream &os, bool optional, DocFormatHelper &dfh) const
std::string parameterTypeEnumToString(ParameterTypes iType)
std::unique_ptr< ParameterDescriptionNode > operator&&(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
void print(std::ostream &os, bool optional, bool writeToCfi, DocFormatHelper &dfh) const
Definition: value.py:1
static void printSpaces(std::ostream &os, int n)
unsigned int uint32
Definition: MsgTools.h:13
std::vector< double > vdouble
std::unique_ptr< ParameterDescriptionCases< bool > > operator||(std::unique_ptr< ParameterDescriptionCases< bool > >, std::unique_ptr< ParameterDescriptionCases< bool > >)
unsigned long long uint64
Definition: MsgTools.h:14
virtual ParameterDescriptionNode * clone() const =0
#define TYPE_TO_NAME(type)
HLT enums.
std::unique_ptr< ParameterDescriptionNode > operator^(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
#define TYPE_TO_ENUM(type, e_val)
bool hasNestedContent(int const &value)
std::vector< std::string > vstring
Definition: Schedule.cc:565
def move(src, dest)
Definition: eostools.py:511