CMS 3D CMS Logo

ParameterDescriptionBase.cc
Go to the documentation of this file.
1 // -*- C++ -*-
2 //
3 // Package: ParameterSet
4 // Class : ParameterDescriptionBase
5 //
6 // Implementation:
7 // <Notes on implementation>
8 //
9 // Original Author: Chris Jones
10 // Created: Thu Aug 2 15:35:43 EDT 2007
11 //
12 
14 
18 
19 #include <iomanip>
20 #include <iostream>
21 
22 namespace edm {
23 
25  std::string const& iLabel, ParameterTypes iType, bool isTracked, bool hasDefault, Comment const& iComment)
26  : ParameterDescriptionNode(iComment),
27  label_(iLabel),
28  type_(iType),
29  isTracked_(isTracked),
30  hasDefault_(hasDefault) {
31  if (label_.empty()) {
32  throw Exception(errors::LogicError) << "Empty string used as a label for a parameter. This is\n"
33  "not allowed.\n";
34  }
35  }
36 
38  char const* iLabel, ParameterTypes iType, bool isTracked, bool hasDefault, Comment const& iComment)
39  : ParameterDescriptionNode(iComment),
40  label_(iLabel),
41  type_(iType),
42  isTracked_(isTracked),
43  hasDefault_(hasDefault) {
44  if (label_.empty()) {
45  throw Exception(errors::LogicError) << "Empty string used as a label for a parameter. This is\n"
46  "not allowed.\n";
47  }
48  }
49 
51 
53  std::string tr("a tracked");
54  std::string shouldBe("untracked");
55  if (isTracked()) {
56  tr = "an untracked";
57  shouldBe = "tracked";
58  }
59 
60  throw Exception(errors::Configuration) << "In the configuration, parameter \"" << label()
61  << "\" is defined "
62  "as "
63  << tr << " " << parameterTypeEnumToString(type()) << ".\n"
64  << "It should be " << shouldBe << ".\n";
65  }
66 
68  std::string tr("an untracked");
69  if (isTracked())
70  tr = "a tracked";
71 
72  throw Exception(errors::Configuration) << "Parameter \"" << label()
73  << "\" should be defined "
74  "as "
75  << tr << " " << parameterTypeEnumToString(type()) << ".\n"
76  << "The type in the configuration is incorrect.\n";
77  }
78 
80  std::string tr("untracked");
81  if (isTracked())
82  tr = "tracked";
83 
85  << "Missing required parameter. It should have label \"" << label() << "\" and have type \"" << tr << " "
86  << parameterTypeEnumToString(type()) << "\".\n"
87  << "The description has no default. The parameter must be defined "
88  "in the configuration\n";
89  }
90 
91  void ParameterDescriptionBase::checkAndGetLabelsAndTypes_(std::set<std::string>& usedLabels,
92  std::set<ParameterTypes>& parameterTypes,
93  std::set<ParameterTypes>& /*wildcardTypes*/) const {
94  usedLabels.insert(label());
95  parameterTypes.insert(type());
96  }
97 
99  std::set<std::string>& validatedLabels,
100  bool optional) const {
101  bool exists = exists_(pset, isTracked());
102 
103  if (exists) {
104  validatedLabels.insert(label());
105  } else if (exists_(pset, !isTracked())) {
107  } else if (pset.exists(label())) {
109  }
110 
111  if (!exists && !optional) {
112  if (hasDefault()) {
113  insertDefault_(pset);
114  validatedLabels.insert(label());
115  } else {
117  }
118  }
119  }
120 
121  void ParameterDescriptionBase::writeCfi_(std::ostream& os,
122  bool& startWithComma,
123  int indentation,
124  bool& wroteSomething) const {
125  if (!hasDefault())
126  return;
127 
128  wroteSomething = true;
129  if (startWithComma)
130  os << ",";
131  startWithComma = true;
132 
133  os << "\n";
134  printSpaces(os, indentation);
135 
136  os << label() << " = cms.";
137  if (!isTracked())
138  os << "untracked.";
139  os << parameterTypeEnumToString(type()) << "(";
140  writeCfi_(os, indentation);
141  os << ")";
142  }
143 
144  void ParameterDescriptionBase::print_(std::ostream& os, bool optional, bool writeToCfi, DocFormatHelper& dfh) const {
145  if (dfh.pass() == 0) {
146  dfh.setAtLeast1(label().size());
147  if (isTracked()) {
149  } else {
151  }
152  if (optional) {
153  dfh.setAtLeast3(8U);
154  }
155  } else {
156  if (dfh.brief()) {
157  std::ios::fmtflags oldFlags = os.flags();
158 
159  dfh.indent(os);
160  os << std::left << std::setw(dfh.column1()) << label() << " ";
161 
162  if (isTracked()) {
163  os << std::setw(dfh.column2()) << parameterTypeEnumToString(type());
164  } else {
165  std::stringstream ss;
166  ss << "untracked ";
168  os << std::setw(dfh.column2()) << ss.str();
169  }
170  os << " ";
171 
172  os << std::setw(dfh.column3());
173  if (optional) {
174  os << "optional";
175  } else {
176  os << "";
177  }
178  os << " ";
179  os.flags(oldFlags);
180  printDefault_(os, writeToCfi, dfh);
181  } else {
182  // not brief
183  dfh.indent(os);
184  os << label() << "\n";
185 
186  dfh.indent2(os);
187  os << "type: ";
188  if (!isTracked())
189  os << "untracked ";
190 
191  os << parameterTypeEnumToString(type()) << " ";
192 
193  if (optional)
194  os << "optional";
195  os << "\n";
196 
197  dfh.indent2(os);
198  printDefault_(os, writeToCfi, dfh);
199 
200  if (!comment().empty()) {
202  }
203  os << "\n";
204  }
205  }
206  }
207 
208  void ParameterDescriptionBase::printDefault_(std::ostream& os, bool writeToCfi, DocFormatHelper& dfh) const {
209  if (!dfh.brief())
210  os << "default: ";
211  if (writeToCfi && hasDefault()) {
212  if (hasNestedContent()) {
213  os << "see Section " << dfh.section() << "." << dfh.counter();
214  } else {
215  if (dfh.brief()) {
216  writeDoc_(os, dfh.indentation());
217  } else {
218  writeDoc_(os, dfh.startColumn2());
219  }
220  }
221  } else {
222  os << "none (do not write to cfi)";
223  }
224  os << "\n";
225  }
226 
227  void ParameterDescriptionBase::printNestedContent_(std::ostream& os, bool /*optional*/, DocFormatHelper& dfh) const {
228  int indentation = dfh.indentation();
229  if (dfh.parent() != DocFormatHelper::TOP) {
230  indentation -= DocFormatHelper::offsetSectionContent();
231  }
232 
233  printSpaces(os, indentation);
234  os << "Section " << dfh.section() << "." << dfh.counter() << " " << label() << " default contents: ";
235  writeDoc_(os, indentation + 2);
236  os << "\n";
237  if (!dfh.brief())
238  os << "\n";
239  }
240 
242 
244  return exists(pset) ? 1 : 0;
245  }
246 } // namespace edm
size
Write out results.
void writeCfi_(std::ostream &os, bool &startWithComma, int indentation, bool &wroteSomething) const override
void printNestedContent_(std::ostream &os, bool optional, DocFormatHelper &dfh) const override
static void wrapAndPrintText(std::ostream &os, std::string const &text, size_t indent, size_t suggestedWidth)
bool exists(std::string const &parameterName) const
checks if a parameter exists
virtual void printDefault_(std::ostream &os, bool writeToCfi, DocFormatHelper &dfh) const
int startColumn2() const
std::string parameterTypeEnumToString(ParameterTypes iType)
bool partiallyExists_(ParameterSet const &pset) const override
DescriptionParent parent() const
void print_(std::ostream &os, bool optional, bool writeToCfi, DocFormatHelper &dfh) const override
int indentation() const
std::string const & comment() const
int howManyXORSubNodesExist_(ParameterSet const &pset) const override
void setAtLeast2(size_t width)
static int offsetSectionContent()
virtual bool exists_(ParameterSet const &pset, bool isTracked) const =0
void indent2(std::ostream &os) const
static void printSpaces(std::ostream &os, int n)
void checkAndGetLabelsAndTypes_(std::set< std::string > &usedLabels, std::set< ParameterTypes > &parameterTypes, std::set< ParameterTypes > &wildcardTypes) const override
size_t column2() const
bool exists(ParameterSet const &pset) const
void validate_(ParameterSet &pset, std::set< std::string > &validatedLabels, bool optional) const override
virtual void insertDefault_(ParameterSet &pset) const =0
size_t column3() const
HLT enums.
ParameterDescriptionBase(std::string const &iLabel, ParameterTypes iType, bool isTracked, bool hasDefault, Comment const &iComment)
void setAtLeast1(size_t width)
size_t column1() const
void setAtLeast3(size_t width)
virtual void writeDoc_(std::ostream &os, int indentation) const =0
void indent(std::ostream &os) const
size_t commentWidth() const
std::string const & label() const
std::string const & section() const