1 #ifndef FWCore_ParameterSet_ParameterDescriptionNode_h 2 #define FWCore_ParameterSet_ParameterDescriptionNode_h 19 #include <unordered_map> 27 class ParameterDescriptionCases;
28 class DocFormatHelper;
78 std::optional<std::unordered_map<std::string, Paths>>
nodes_;
86 p->nodes_ = std::unordered_map<std::string, Paths>();
88 p = &(
p->nodes_.value().emplace(
n,
Paths{})).first->second;
121 return not
p->nodes_.has_value();
133 using CfiOptions = std::variant<cfi::Typed, cfi::ClassFile, cfi::Untyped>;
136 if (std::holds_alternative<cfi::ClassFile>(iOps)) {
141 if (std::holds_alternative<cfi::ClassFile>(iOps)) {
142 auto&
d = std::get<cfi::ClassFile>(iOps);
144 d.parameterMustBeTyped();
149 return std::holds_alternative<cfi::Untyped>(iOps);
161 temp.options_ =
nullptr;
168 if (std::holds_alternative<ClassFile>(*
options_)) {
169 std::get<ClassFile>(*options_).popNode();
170 }
else if (std::holds_alternative<Untyped>(*
options_)) {
171 std::get<Untyped>(*options_).popNode();
179 if (std::holds_alternative<Untyped>(iOpt)) {
181 }
else if (std::holds_alternative<ClassFile>(iOpt)) {
182 std::get<ClassFile>(iOpt).pushNode(iNode);
184 return std::pair(
false,
NodeGuard(iOpt));
198 explicit Comment(
char const* iComment);
241 bool& startWithComma,
244 bool& wroteSomething)
const {
336 std::set<ParameterTypes>& parameterTypes,
337 std::set<ParameterTypes>& wildcardTypes)
const {
346 std::set<ParameterTypes>& parameterTypes,
347 std::set<ParameterTypes>& wildcardTypes)
const = 0;
353 bool& startWithComma,
356 bool& wroteSomething)
const = 0;
381 std::unique_ptr<ParameterDescriptionCases<bool>>
operator>>(
bool caseValue, ParameterDescriptionNode
const& node);
383 std::unique_ptr<ParameterDescriptionCases<int>>
operator>>(
int caseValue, ParameterDescriptionNode
const& node);
386 ParameterDescriptionNode
const& node);
388 std::unique_ptr<ParameterDescriptionCases<std::string>>
operator>>(
char const* caseValue,
389 ParameterDescriptionNode
const& node);
391 std::unique_ptr<ParameterDescriptionCases<bool>>
operator>>(
bool caseValue,
392 std::unique_ptr<ParameterDescriptionNode> node);
394 std::unique_ptr<ParameterDescriptionCases<int>>
operator>>(
int caseValue,
395 std::unique_ptr<ParameterDescriptionNode> node);
398 std::unique_ptr<ParameterDescriptionNode> node);
400 std::unique_ptr<ParameterDescriptionCases<std::string>>
operator>>(
char const* caseValue,
401 std::unique_ptr<ParameterDescriptionNode> node);
405 std::unique_ptr<ParameterDescriptionNode>
operator&&(ParameterDescriptionNode
const& node_left,
406 ParameterDescriptionNode
const& node_right);
408 std::unique_ptr<ParameterDescriptionNode>
operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
409 ParameterDescriptionNode
const& node_right);
411 std::unique_ptr<ParameterDescriptionNode>
operator&&(ParameterDescriptionNode
const& node_left,
412 std::unique_ptr<ParameterDescriptionNode> node_right);
414 std::unique_ptr<ParameterDescriptionNode>
operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
415 std::unique_ptr<ParameterDescriptionNode> node_right);
419 std::unique_ptr<ParameterDescriptionNode>
operator||(ParameterDescriptionNode
const& node_left,
420 ParameterDescriptionNode
const& node_right);
422 std::unique_ptr<ParameterDescriptionNode>
operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
423 ParameterDescriptionNode
const& node_right);
425 std::unique_ptr<ParameterDescriptionNode>
operator||(ParameterDescriptionNode
const& node_left,
426 std::unique_ptr<ParameterDescriptionNode> node_right);
428 std::unique_ptr<ParameterDescriptionNode>
operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
429 std::unique_ptr<ParameterDescriptionNode> node_right);
433 std::unique_ptr<ParameterDescriptionNode>
operator^(ParameterDescriptionNode
const& node_left,
434 ParameterDescriptionNode
const& node_right);
436 std::unique_ptr<ParameterDescriptionNode>
operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
437 ParameterDescriptionNode
const& node_right);
439 std::unique_ptr<ParameterDescriptionNode>
operator^(ParameterDescriptionNode
const& node_left,
440 std::unique_ptr<ParameterDescriptionNode> node_right);
442 std::unique_ptr<ParameterDescriptionNode>
operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
443 std::unique_ptr<ParameterDescriptionNode> node_right);
bool shouldWriteUntyped(CfiOptions const &iOps) noexcept
std::vector< std::string_view > presentPath_
virtual ~ParameterDescriptionNode()
void setComment(std::string const &value)
virtual ParameterDescriptionNode * clone() const =0
virtual bool partiallyExists_(ParameterSet const &pset) const =0
std::unique_ptr< ParameterDescriptionNode > operator &&(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
virtual bool isWildcard() const
virtual void checkAndGetLabelsAndTypes_(std::set< std::string > &usedLabels, std::set< ParameterTypes > ¶meterTypes, std::set< ParameterTypes > &wildcardTypes) const =0
void pushNode(std::string_view iNode)
void print(std::ostream &os, bool optional, bool writeToCfi, DocFormatHelper &dfh) const
virtual bool hasNestedContent_() const
std::unique_ptr< ParameterDescriptionCases< bool > > operator>>(bool caseValue, ParameterDescriptionNode const &node)
NodeGuard(CfiOptions &iOp)
NodeGuard(NodeGuard &&iOther)
virtual int howManyXORSubNodesExist_(ParameterSet const &pset) const =0
bool needToSwitchToTyped(std::string_view iNode)
std::string parameterTypeEnumToString(ParameterTypes iType)
static ParameterDescriptionNode * clone(ParameterDescriptionNode const *p)
void parameterMustBeTyped(CfiOptions &iOps) noexcept
void printNestedContent(std::ostream &os, bool optional, DocFormatHelper &dfh) const
std::vector< std::string_view > presentPath_
static void printSpaces(std::ostream &os, int n)
std::variant< cfi::Typed, cfi::ClassFile, cfi::Untyped > CfiOptions
void parameterMustBeTyped()
bool partiallyExists(ParameterSet const &pset) const
std::unique_ptr< ParameterDescriptionCases< bool > > operator||(std::unique_ptr< ParameterDescriptionCases< bool > >, std::unique_ptr< ParameterDescriptionCases< bool > >)
void checkAndGetLabelsAndTypes(std::set< std::string > &usedLabels, std::set< ParameterTypes > ¶meterTypes, std::set< ParameterTypes > &wildcardTypes) const
std::string const & comment() const
int howManyXORSubNodesExist(ParameterSet const &pset) const
bool exists(ParameterSet const &pset) const
virtual void validate_(ParameterSet &pset, std::set< std::string > &validatedLabels, bool optional) const =0
static ParameterTypes toEnum()
static void destroy(ParameterDescriptionNode *p)
std::optional< std::unordered_map< std::string, Paths > > nodes_
std::unique_ptr< ParameterDescriptionNode > operator^(ParameterDescriptionNode const &node_left, ParameterDescriptionNode const &node_right)
virtual bool exists_(ParameterSet const &pset) const =0
void writeCfi(std::ostream &os, bool optional, bool &startWithComma, int indentation, CfiOptions &options, bool &wroteSomething) const
ParameterDescriptionNode()
NodeGuard & operator=(NodeGuard &&iOther)
virtual void print_(std::ostream &, bool, bool, DocFormatHelper &) const
virtual void printNestedContent_(std::ostream &, bool, DocFormatHelper &) const
bool hasNestedContent() const
NodeGuard & operator=(NodeGuard const &)=delete
void validate(ParameterSet &pset, std::set< std::string > &validatedLabels, bool optional) const
ParameterDescriptionNode(Comment const &iComment)
std::pair< bool, NodeGuard > needToSwitchToTyped(std::string_view iNode, CfiOptions &iOpt) noexcept
cfi::CfiOptions CfiOptions
virtual void writeCfi_(std::ostream &os, bool optional, bool &startWithComma, int indentation, CfiOptions &, bool &wroteSomething) const =0