#include <ORGroupDescription.h>
Public Member Functions | |
virtual ParameterDescriptionNode * | clone () const |
ORGroupDescription (std::auto_ptr< ParameterDescriptionNode > node_left, ParameterDescriptionNode const &node_right) | |
ORGroupDescription (std::auto_ptr< ParameterDescriptionNode > node_left, std::auto_ptr< ParameterDescriptionNode > node_right) | |
ORGroupDescription (ParameterDescriptionNode const &node_left, std::auto_ptr< ParameterDescriptionNode > node_right) | |
ORGroupDescription (ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right) | |
Private Member Functions | |
virtual void | checkAndGetLabelsAndTypes_ (std::set< std::string > &usedLabels, std::set< ParameterTypes > ¶meterTypes, std::set< ParameterTypes > &wildcardTypes) const |
virtual bool | exists_ (ParameterSet const &pset) const |
virtual bool | hasNestedContent_ () |
virtual int | howManyXORSubNodesExist_ (ParameterSet const &pset) const |
virtual bool | partiallyExists_ (ParameterSet const &pset) const |
virtual void | print_ (std::ostream &os, bool optional, bool writeToCfi, DocFormatHelper &dfh) |
virtual void | printNestedContent_ (std::ostream &os, bool optional, DocFormatHelper &dfh) |
void | throwIfDuplicateLabels (std::set< std::string > const &labelsLeft, std::set< std::string > const &labelsRight) const |
void | throwIfDuplicateTypes (std::set< ParameterTypes > const &types1, std::set< ParameterTypes > const &types2) const |
virtual void | validate_ (ParameterSet &pset, std::set< std::string > &validatedLabels, bool optional) const |
virtual void | writeCfi_ (std::ostream &os, bool &startWithComma, int indentation, bool &wroteSomething) const |
Private Attributes | |
edm::value_ptr < ParameterDescriptionNode > | node_left_ |
edm::value_ptr < ParameterDescriptionNode > | node_right_ |
Definition at line 18 of file ORGroupDescription.h.
edm::ORGroupDescription::ORGroupDescription | ( | ParameterDescriptionNode const & | node_left, |
ParameterDescriptionNode const & | node_right | ||
) |
Definition at line 14 of file ORGroupDescription.cc.
Referenced by clone().
: node_left_(node_left.clone()), node_right_(node_right.clone()) { }
edm::ORGroupDescription::ORGroupDescription | ( | std::auto_ptr< ParameterDescriptionNode > | node_left, |
ParameterDescriptionNode const & | node_right | ||
) |
Definition at line 21 of file ORGroupDescription.cc.
: node_left_(node_left), node_right_(node_right.clone()) { }
edm::ORGroupDescription::ORGroupDescription | ( | ParameterDescriptionNode const & | node_left, |
std::auto_ptr< ParameterDescriptionNode > | node_right | ||
) |
Definition at line 28 of file ORGroupDescription.cc.
: node_left_(node_left.clone()), node_right_(node_right) { }
edm::ORGroupDescription::ORGroupDescription | ( | std::auto_ptr< ParameterDescriptionNode > | node_left, |
std::auto_ptr< ParameterDescriptionNode > | node_right | ||
) |
Definition at line 35 of file ORGroupDescription.cc.
: node_left_(node_left), node_right_(node_right) { }
void edm::ORGroupDescription::checkAndGetLabelsAndTypes_ | ( | std::set< std::string > & | usedLabels, |
std::set< ParameterTypes > & | parameterTypes, | ||
std::set< ParameterTypes > & | wildcardTypes | ||
) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 43 of file ORGroupDescription.cc.
References node_left_, node_right_, throwIfDuplicateLabels(), and throwIfDuplicateTypes().
{ std::set<std::string> labelsLeft; std::set<ParameterTypes> parameterTypesLeft; std::set<ParameterTypes> wildcardTypesLeft; node_left_->checkAndGetLabelsAndTypes(labelsLeft, parameterTypesLeft, wildcardTypesLeft); std::set<std::string> labelsRight; std::set<ParameterTypes> parameterTypesRight; std::set<ParameterTypes> wildcardTypesRight; node_right_->checkAndGetLabelsAndTypes(labelsRight, parameterTypesRight, wildcardTypesRight); throwIfDuplicateLabels(labelsLeft, labelsRight); throwIfDuplicateTypes(wildcardTypesLeft, parameterTypesRight); throwIfDuplicateTypes(wildcardTypesRight, parameterTypesLeft); usedLabels.insert(labelsLeft.begin(), labelsLeft.end()); usedLabels.insert(labelsRight.begin(), labelsRight.end()); parameterTypes.insert(parameterTypesRight.begin(), parameterTypesRight.end()); parameterTypes.insert(parameterTypesLeft.begin(), parameterTypesLeft.end()); wildcardTypes.insert(wildcardTypesRight.begin(), wildcardTypesRight.end()); wildcardTypes.insert(wildcardTypesLeft.begin(), wildcardTypesLeft.end()); }
virtual ParameterDescriptionNode* edm::ORGroupDescription::clone | ( | void | ) | const [inline, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 32 of file ORGroupDescription.h.
References ORGroupDescription().
{ return new ORGroupDescription(*this); }
bool edm::ORGroupDescription::exists_ | ( | ParameterSet const & | pset | ) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 214 of file ORGroupDescription.cc.
References node_left_, and node_right_.
{ return node_left_->exists(pset) || node_right_->exists(pset); }
virtual bool edm::ORGroupDescription::hasNestedContent_ | ( | ) | [inline, private, virtual] |
Reimplemented from edm::ParameterDescriptionNode.
Definition at line 56 of file ORGroupDescription.h.
{ return true; }
int edm::ORGroupDescription::howManyXORSubNodesExist_ | ( | ParameterSet const & | pset | ) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 227 of file ORGroupDescription.cc.
References edm::ParameterDescriptionNode::exists().
{ return exists(pset) ? 1 : 0; }
bool edm::ORGroupDescription::partiallyExists_ | ( | ParameterSet const & | pset | ) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 221 of file ORGroupDescription.cc.
References edm::ParameterDescriptionNode::exists().
{ return exists(pset); }
void edm::ORGroupDescription::print_ | ( | std::ostream & | os, |
bool | optional, | ||
bool | writeToCfi, | ||
DocFormatHelper & | dfh | ||
) | [private, virtual] |
Reimplemented from edm::ParameterDescriptionNode.
Definition at line 102 of file ORGroupDescription.cc.
References edm::DocFormatHelper::brief(), edm::ParameterDescriptionNode::comment(), edm::DocFormatHelper::commentWidth(), edm::DocFormatHelper::counter(), edm::DocFormatHelper::decrementCounter(), relativeConstraints::empty, edm::DocFormatHelper::indent(), edm::DocFormatHelper::indent2(), node_left_, node_right_, edm::DocFormatHelper::OR, edm::DocFormatHelper::parent(), edm::DocFormatHelper::pass(), edm::DocFormatHelper::section(), edm::DocFormatHelper::startColumn2(), and edm::DocFormatHelper::wrapAndPrintText().
{ if (dfh.parent() == DocFormatHelper::OR) { dfh.decrementCounter(); node_left_->print(os, false, true, dfh); node_right_->print(os, false, true, dfh); return; } if (dfh.pass() == 1) { dfh.indent(os); os << "OR group:"; if (dfh.brief()) { if (optional) os << " optional"; if (!writeToCfi) os << " (do not write to cfi)"; os << " see Section " << dfh.section() << "." << dfh.counter() << "\n"; } // not brief else { os << "\n"; dfh.indent2(os); if (optional) os << "optional"; if (!writeToCfi) os << " (do not write to cfi)"; if (optional || !writeToCfi) { os << "\n"; dfh.indent2(os); } os << "see Section " << dfh.section() << "." << dfh.counter() << "\n"; if (!comment().empty()) { DocFormatHelper::wrapAndPrintText(os, comment(), dfh.startColumn2(), dfh.commentWidth()); } os << "\n"; } } }
void edm::ORGroupDescription::printNestedContent_ | ( | std::ostream & | os, |
bool | optional, | ||
DocFormatHelper & | dfh | ||
) | [private, virtual] |
Reimplemented from edm::ParameterDescriptionNode.
Definition at line 155 of file ORGroupDescription.cc.
References edm::DocFormatHelper::brief(), edm::DocFormatHelper::counter(), edm::DocFormatHelper::decrementCounter(), edm::DocFormatHelper::indentation(), edm::DocFormatHelper::init(), node_left_, node_right_, edm::DocFormatHelper::offsetSectionContent(), edm::DocFormatHelper::OR, edm::DocFormatHelper::parent(), edm::ParameterDescriptionNode::printSpaces(), edm::DocFormatHelper::section(), edm::DocFormatHelper::setCounter(), edm::DocFormatHelper::setIndentation(), edm::DocFormatHelper::setParent(), edm::DocFormatHelper::setPass(), edm::DocFormatHelper::setSection(), and pat::TOP.
{ if (dfh.parent() == DocFormatHelper::OR) { dfh.decrementCounter(); node_left_->printNestedContent(os, false, dfh); node_right_->printNestedContent(os, false, dfh); return; } int indentation = dfh.indentation(); if (dfh.parent() != DocFormatHelper::TOP) { indentation -= DocFormatHelper::offsetSectionContent(); } std::stringstream ss; ss << dfh.section() << "." << dfh.counter(); std::string newSection = ss.str(); printSpaces(os, indentation); os << "Section " << newSection << " OR group description:\n"; printSpaces(os, indentation); if (optional) { // An optional OR group is kind of pointless, it would be // easier just make the parameters be independent optional parameters // I only allow it to make the behavior analogous to the other groups os << "This optional OR group requires at least one or none of the following to be in the PSet\n"; } else { os << "This OR group requires at least one of the following to be in the PSet\n"; } if (!dfh.brief()) os << "\n"; DocFormatHelper new_dfh(dfh); new_dfh.init(); new_dfh.setSection(newSection); new_dfh.setIndentation(indentation + DocFormatHelper::offsetSectionContent()); new_dfh.setParent(DocFormatHelper::OR); node_left_->print(os, false, true, new_dfh); node_right_->print(os, false, true, new_dfh); new_dfh.setPass(1); new_dfh.setCounter(0); node_left_->print(os, false, true, new_dfh); node_right_->print(os, false, true, new_dfh); new_dfh.setPass(2); new_dfh.setCounter(0); node_left_->printNestedContent(os, false, new_dfh); node_right_->printNestedContent(os, false, new_dfh); }
void edm::ORGroupDescription::throwIfDuplicateLabels | ( | std::set< std::string > const & | labelsLeft, |
std::set< std::string > const & | labelsRight | ||
) | const [private] |
Definition at line 233 of file ORGroupDescription.cc.
References Exception, and edm::errors::LogicError.
Referenced by checkAndGetLabelsAndTypes_().
{ std::set<std::string> duplicateLabels; std::insert_iterator<std::set<std::string> > insertIter(duplicateLabels, duplicateLabels.begin()); std::set_intersection(labelsLeft.begin(), labelsLeft.end(), labelsRight.begin(), labelsRight.end(), insertIter); if (!duplicateLabels.empty()) { std::stringstream ss; for (std::set<std::string>::const_iterator iter = duplicateLabels.begin(), iEnd = duplicateLabels.end(); iter != iEnd; ++iter) { ss << " \"" << *iter << "\"\n"; } throw edm::Exception(errors::LogicError) << "Labels used in a node of a ParameterSetDescription\n" << "\"or\" expression must be not be the same as labels used\n" << "in other nodes of the expression. The following duplicate\n" << "labels were detected:\n" << ss.str() << "\n"; } }
void edm::ORGroupDescription::throwIfDuplicateTypes | ( | std::set< ParameterTypes > const & | types1, |
std::set< ParameterTypes > const & | types2 | ||
) | const [private] |
Definition at line 261 of file ORGroupDescription.cc.
References Exception, edm::errors::LogicError, and edm::parameterTypeEnumToString().
Referenced by checkAndGetLabelsAndTypes_().
{ if (!types1.empty()) { std::set<ParameterTypes> duplicateTypes; std::insert_iterator<std::set<ParameterTypes> > insertIter(duplicateTypes, duplicateTypes.begin()); std::set_intersection(types1.begin(), types1.end(), types2.begin(), types2.end(), insertIter); if (!duplicateTypes.empty()) { std::stringstream ss; for (std::set<ParameterTypes>::const_iterator iter = duplicateTypes.begin(), iEnd = duplicateTypes.end(); iter != iEnd; ++iter) { ss << " \"" << parameterTypeEnumToString(*iter) << "\"\n"; } throw edm::Exception(errors::LogicError) << "Types used for wildcards in a node of a ParameterSetDescription\n" << "\"or\" expression must be different from types used for other parameters\n" << "in other nodes. The following duplicate types were detected:\n" << ss.str() << "\n"; } } }
void edm::ORGroupDescription::validate_ | ( | ParameterSet & | pset, |
std::set< std::string > & | validatedLabels, | ||
bool | optional | ||
) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 73 of file ORGroupDescription.cc.
References node_left_, and node_right_.
{ bool leftExists = node_left_->exists(pset); bool rightExists = node_right_->exists(pset); if (leftExists || rightExists) { if (leftExists) node_left_->validate(pset, validatedLabels, false); if (rightExists) node_right_->validate(pset, validatedLabels, false); return; } if (optional) return; node_left_->validate(pset, validatedLabels, false); }
void edm::ORGroupDescription::writeCfi_ | ( | std::ostream & | os, |
bool & | startWithComma, | ||
int | indentation, | ||
bool & | wroteSomething | ||
) | const [private, virtual] |
Implements edm::ParameterDescriptionNode.
Definition at line 93 of file ORGroupDescription.cc.
References node_left_.
{ node_left_->writeCfi(os, startWithComma, indentation, wroteSomething); }
Definition at line 76 of file ORGroupDescription.h.
Referenced by checkAndGetLabelsAndTypes_(), exists_(), print_(), printNestedContent_(), validate_(), and writeCfi_().
Definition at line 77 of file ORGroupDescription.h.
Referenced by checkAndGetLabelsAndTypes_(), exists_(), print_(), printNestedContent_(), and validate_().