CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
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 ESInputTag;
30  class FileInPath;
31 
35  TYPE_TO_ENUM(std::vector<unsigned>, k_vuint32)
36  TYPE_TO_ENUM(long long, k_int64)
37  TYPE_TO_ENUM(std::vector<long long>, k_vint64)
38  TYPE_TO_ENUM(unsigned long long, k_uint64)
39  TYPE_TO_ENUM(std::vector<unsigned long long>, k_vuint64)
41  TYPE_TO_ENUM(std::vector<double>, k_vdouble)
43  TYPE_TO_ENUM(std::string, k_string)
44  TYPE_TO_ENUM(std::vector<std::string>, k_vstring)
46  TYPE_TO_ENUM(std::vector<EventID>, k_VEventID)
48  TYPE_TO_ENUM(std::vector<LuminosityBlockID>, k_VLuminosityBlockID)
50  TYPE_TO_ENUM(std::vector<InputTag>, k_VInputTag)
52  TYPE_TO_ENUM(std::vector<ESInputTag>, k_VESInputTag)
55  TYPE_TO_ENUM(std::vector<LuminosityBlockRange>, k_VLuminosityBlockRange)
57  TYPE_TO_ENUM(std::vector<EventRange>, k_VEventRange)
58  // These are intentionally not implemented to prevent one
59  // from calling add<ParameterSet>. One should call
60  // add<ParameterSetDescription> instead.
61  // TYPE_TO_ENUM(ParameterSet,k_PSet)
62  // TYPE_TO_ENUM(std::vector<ParameterSet>,k_VPSet)
63 
65  switch (iType) {
66  TYPE_TO_NAME(int32);
67  TYPE_TO_NAME(vint32);
69  TYPE_TO_NAME(vuint32);
70  TYPE_TO_NAME(int64);
71  TYPE_TO_NAME(vint64);
73  TYPE_TO_NAME(vuint64);
74  TYPE_TO_NAME(double);
76  TYPE_TO_NAME(bool);
77  TYPE_TO_NAME(string);
79  TYPE_TO_NAME(EventID);
80  TYPE_TO_NAME(VEventID);
81  TYPE_TO_NAME(LuminosityBlockID);
82  TYPE_TO_NAME(VLuminosityBlockID);
83  TYPE_TO_NAME(InputTag);
84  TYPE_TO_NAME(VInputTag);
85  TYPE_TO_NAME(ESInputTag);
86  TYPE_TO_NAME(VESInputTag);
87  TYPE_TO_NAME(FileInPath);
88  TYPE_TO_NAME(PSet);
90  TYPE_TO_NAME(LuminosityBlockRange);
91  TYPE_TO_NAME(VLuminosityBlockRange);
92  TYPE_TO_NAME(EventRange);
93  TYPE_TO_NAME(VEventRange);
94  default:
95  assert(false);
96  }
97  return "";
98  }
99 
101  Comment::Comment(std::string const& iComment) : comment_(iComment) {}
102  Comment::Comment(char const* iComment) : comment_(iComment) {}
103 
105 
107 
109 
110  void ParameterDescriptionNode::print(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const {
111  if (hasNestedContent()) {
112  dfh.incrementCounter();
113  }
114  print_(os, optional, writeToCfi, dfh);
115  }
116 
117  void ParameterDescriptionNode::printNestedContent(std::ostream& os, bool optional, DocFormatHelper& dfh) const {
118  if (hasNestedContent()) {
119  dfh.incrementCounter();
120  printNestedContent_(os, optional, dfh);
121  }
122  }
123 
124  void ParameterDescriptionNode::printSpaces(std::ostream& os, int n) {
125  char oldFill = os.fill(' ');
126  os.width(n);
127  os << "";
128  os.fill(oldFill);
129  }
130 
131  // operator>> ---------------------------------------------
132 
133  std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool 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<int>> operator>>(int caseValue, ParameterDescriptionNode const& node) {
139  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
140  return caseValue >> std::move(clonedNode);
141  }
142 
143  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
144  ParameterDescriptionNode const& node) {
145  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
146  return caseValue >> std::move(clonedNode);
147  }
148 
149  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
150  ParameterDescriptionNode const& node) {
151  std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
152  return caseValue >> std::move(clonedNode);
153  }
154 
155  std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool caseValue,
156  std::unique_ptr<ParameterDescriptionNode> node) {
157  return std::unique_ptr<ParameterDescriptionCases<bool>>(
158  new ParameterDescriptionCases<bool>(caseValue, std::move(node)));
159  }
160 
161  std::unique_ptr<ParameterDescriptionCases<int>> operator>>(int caseValue,
162  std::unique_ptr<ParameterDescriptionNode> node) {
163  return std::unique_ptr<ParameterDescriptionCases<int>>(
164  new ParameterDescriptionCases<int>(caseValue, std::move(node)));
165  }
166 
167  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
168  std::unique_ptr<ParameterDescriptionNode> node) {
169  return std::unique_ptr<ParameterDescriptionCases<std::string>>(
170  new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
171  }
172 
173  std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
174  std::unique_ptr<ParameterDescriptionNode> node) {
175  std::string caseValueString(caseValue);
176  return std::unique_ptr<ParameterDescriptionCases<std::string>>(
177  new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
178  }
179 
180  // operator&& ---------------------------------------------
181 
182  std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
183  ParameterDescriptionNode const& node_right) {
184  return std::make_unique<ANDGroupDescription>(node_left, node_right);
185  }
186 
187  std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
188  ParameterDescriptionNode const& node_right) {
189  return std::make_unique<ANDGroupDescription>(std::move(node_left), node_right);
190  }
191 
192  std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
193  std::unique_ptr<ParameterDescriptionNode> node_right) {
194  return std::make_unique<ANDGroupDescription>(node_left, std::move(node_right));
195  }
196 
197  std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
198  std::unique_ptr<ParameterDescriptionNode> node_right) {
199  return std::make_unique<ANDGroupDescription>(std::move(node_left), std::move(node_right));
200  }
201 
202  // operator|| ---------------------------------------------
203 
204  std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
205  ParameterDescriptionNode const& node_right) {
206  return std::make_unique<ORGroupDescription>(node_left, node_right);
207  }
208 
209  std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
210  ParameterDescriptionNode const& node_right) {
211  return std::make_unique<ORGroupDescription>(std::move(node_left), node_right);
212  }
213 
214  std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
215  std::unique_ptr<ParameterDescriptionNode> node_right) {
216  return std::make_unique<ORGroupDescription>(node_left, std::move(node_right));
217  }
218 
219  std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
220  std::unique_ptr<ParameterDescriptionNode> node_right) {
221  return std::make_unique<ORGroupDescription>(std::move(node_left), std::move(node_right));
222  }
223 
224  // operator^ ---------------------------------------------
225 
226  std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
227  ParameterDescriptionNode const& node_right) {
228  return std::make_unique<XORGroupDescription>(node_left, node_right);
229  }
230 
231  std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
232  ParameterDescriptionNode const& node_right) {
233  return std::make_unique<XORGroupDescription>(std::move(node_left), node_right);
234  }
235 
236  std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
237  std::unique_ptr<ParameterDescriptionNode> node_right) {
238  return std::make_unique<XORGroupDescription>(node_left, std::move(node_right));
239  }
240 
241  std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
242  std::unique_ptr<ParameterDescriptionNode> node_right) {
243  return std::make_unique<XORGroupDescription>(std::move(node_left), std::move(node_right));
244  }
245 } // namespace edm
tuple optional
Definition: Types.py:198
void setComment(std::string const &value)
virtual ParameterDescriptionNode * clone() const =0
std::unique_ptr< ParameterDescriptionCases< bool > > operator>>(bool caseValue, ParameterDescriptionNode const &node)
void printNestedContent(std::ostream &os, bool optional, DocFormatHelper &dfh) const
#define TYPE_TO_ENUM(type, e_val)
virtual void printNestedContent_(std::ostream &, bool, DocFormatHelper &) const
assert(be >=bs)
std::string parameterTypeEnumToString(ParameterTypes iType)
std::unique_ptr< ParameterDescriptionNode > operator&&(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
def move
Definition: eostools.py:511
void print(std::ostream &os, bool optional, bool writeToCfi, DocFormatHelper &dfh) const
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
#define TYPE_TO_NAME(type)
std::unique_ptr< ParameterDescriptionNode > operator^(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
std::vector< std::string > vstring
Definition: Schedule.cc:667
virtual void print_(std::ostream &, bool, bool, DocFormatHelper &) const