File indexing completed on 2024-05-23 03:13:13
0001 #ifndef FWCore_ParameterSet_ParameterWildcard_h
0002 #define FWCore_ParameterSet_ParameterWildcard_h
0003
0004 #include "FWCore/ParameterSet/interface/ParameterWildcardBase.h"
0005 #include "FWCore/ParameterSet/interface/ParameterDescriptionNode.h"
0006 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0007 #include "FWCore/ParameterSet/interface/ParameterSetDescriptionTraits.h"
0008 #include "FWCore/Utilities/interface/value_ptr.h"
0009
0010 #include <string>
0011 #include <set>
0012 #include <iosfwd>
0013 #include <vector>
0014
0015 namespace edm {
0016
0017 class ParameterSet;
0018 class VParameterSetEntry;
0019 class ParameterSetDescription;
0020 class DocFormatHelper;
0021
0022 template <class T>
0023 class ParameterWildcard : public ParameterWildcardBase {
0024 public:
0025 ParameterWildcard(std::string const& pattern, WildcardValidationCriteria criteria, bool isTracked)
0026 : ParameterWildcardBase(ParameterTypeToEnum::toEnum<T>(), isTracked, criteria) {
0027 throwIfInvalidPattern(pattern);
0028 }
0029
0030 ParameterWildcard(char const* pattern, WildcardValidationCriteria criteria, bool isTracked)
0031 : ParameterWildcardBase(ParameterTypeToEnum::toEnum<T>(), isTracked, criteria) {
0032 throwIfInvalidPattern(pattern);
0033 }
0034
0035 ~ParameterWildcard() override {}
0036
0037 ParameterDescriptionNode* clone() const override { return new ParameterWildcard(*this); }
0038
0039 private:
0040 void validate_(ParameterSet& pset, std::set<std::string>& validatedLabels, bool optional) const override {
0041 std::vector<std::string> parameterNames = pset.getParameterNamesForType<T>(isTracked());
0042 validateMatchingNames(parameterNames, validatedLabels, optional);
0043 }
0044
0045 bool exists_(ParameterSet const& pset) const override {
0046 if (criteria() == RequireZeroOrMore)
0047 return true;
0048
0049 std::vector<std::string> parameterNames = pset.getParameterNamesForType<T>(isTracked());
0050
0051 if (criteria() == RequireAtLeastOne)
0052 return !parameterNames.empty();
0053 return parameterNames.size() == 1U;
0054 }
0055
0056
0057 };
0058
0059 template <>
0060 class ParameterWildcard<ParameterSetDescription> : public ParameterWildcardBase {
0061 public:
0062 ParameterWildcard(std::string const& pattern, WildcardValidationCriteria criteria, bool isTracked);
0063 ParameterWildcard(char const* pattern, WildcardValidationCriteria criteria, bool isTracked);
0064
0065 ParameterWildcard(std::string const& pattern,
0066 WildcardValidationCriteria criteria,
0067 bool isTracked,
0068 ParameterSetDescription const& desc);
0069 ParameterWildcard(char const* pattern,
0070 WildcardValidationCriteria criteria,
0071 bool isTracked,
0072 ParameterSetDescription const& desc);
0073
0074 ~ParameterWildcard() override;
0075
0076 ParameterDescriptionNode* clone() const override;
0077
0078 private:
0079 void writeTemplate(std::ostream& os, int indentation, CfiOptions&) const override;
0080 void validate_(ParameterSet& pset, std::set<std::string>& validatedLabels, bool optional) const override;
0081
0082 bool hasNestedContent_() const override;
0083
0084 void printNestedContent_(std::ostream& os, bool optional, DocFormatHelper& helper) const override;
0085
0086 bool exists_(ParameterSet const& pset) const override;
0087
0088 void validateDescription(std::string const& parameterName, ParameterSet& pset) const;
0089
0090 value_ptr<ParameterSetDescription> psetDesc_;
0091 };
0092
0093 template <>
0094 class ParameterWildcard<std::vector<ParameterSet> > : public ParameterWildcardBase {
0095 public:
0096 ParameterWildcard(std::string const& pattern, WildcardValidationCriteria criteria, bool isTracked);
0097 ParameterWildcard(char const* pattern, WildcardValidationCriteria criteria, bool isTracked);
0098
0099 ParameterWildcard(std::string const& pattern,
0100 WildcardValidationCriteria criteria,
0101 bool isTracked,
0102 ParameterSetDescription const& desc);
0103 ParameterWildcard(char const* pattern,
0104 WildcardValidationCriteria criteria,
0105 bool isTracked,
0106 ParameterSetDescription const& desc);
0107
0108 ~ParameterWildcard() override;
0109
0110 ParameterDescriptionNode* clone() const override;
0111
0112 private:
0113 void validate_(ParameterSet& pset, std::set<std::string>& validatedLabels, bool optional) const override;
0114
0115 bool hasNestedContent_() const override;
0116
0117 void printNestedContent_(std::ostream& os, bool optional, DocFormatHelper& dfh) const override;
0118
0119 bool exists_(ParameterSet const& pset) const override;
0120
0121 void validatePSetVector(std::string const& parameterName, ParameterSet& pset) const;
0122
0123 value_ptr<ParameterSetDescription> psetDesc_;
0124 };
0125 }
0126 #endif