File indexing completed on 2025-03-26 01:51:13
0001
0002 #include "FWCore/ParameterSet/interface/ParameterDescriptionNode.h"
0003 #include "FWCore/ParameterSet/interface/ParameterDescriptionCases.h"
0004 #include "FWCore/ParameterSet/src/ANDGroupDescription.h"
0005 #include "FWCore/ParameterSet/src/ORGroupDescription.h"
0006 #include "FWCore/ParameterSet/src/XORGroupDescription.h"
0007 #include "FWCore/ParameterSet/interface/DocFormatHelper.h"
0008
0009 #include <vector>
0010 #include <cassert>
0011 #include <ostream>
0012
0013 #define TYPE_TO_ENUM(type, e_val) \
0014 template <> \
0015 ParameterTypes ParameterTypeToEnum::toEnum<type>() { \
0016 return e_val; \
0017 }
0018 #define TYPE_TO_NAME(type) \
0019 case k_##type: \
0020 return #type
0021 #define TYPE_TO_NAME2(e_val, type) \
0022 case e_val: \
0023 return #type
0024
0025 namespace edm {
0026
0027 class EventID;
0028 class LuminosityBlockID;
0029 class LuminosityBlockRange;
0030 class EventRange;
0031 class InputTag;
0032 class ESInputTag;
0033 class FileInPath;
0034
0035 TYPE_TO_ENUM(int, k_int32)
0036 TYPE_TO_ENUM(std::vector<int>, k_vint32)
0037 TYPE_TO_ENUM(unsigned, k_uint32)
0038 TYPE_TO_ENUM(std::vector<unsigned>, k_vuint32)
0039 TYPE_TO_ENUM(long long, k_int64)
0040 TYPE_TO_ENUM(std::vector<long long>, k_vint64)
0041 TYPE_TO_ENUM(unsigned long long, k_uint64)
0042 TYPE_TO_ENUM(std::vector<unsigned long long>, k_vuint64)
0043 TYPE_TO_ENUM(double, k_double)
0044 TYPE_TO_ENUM(std::vector<double>, k_vdouble)
0045 TYPE_TO_ENUM(bool, k_bool)
0046 TYPE_TO_ENUM(std::string, k_stringRaw)
0047 TYPE_TO_ENUM(std::vector<std::string>, k_vstringRaw)
0048 TYPE_TO_ENUM(EventID, k_EventID)
0049 TYPE_TO_ENUM(std::vector<EventID>, k_VEventID)
0050 TYPE_TO_ENUM(LuminosityBlockID, k_LuminosityBlockID)
0051 TYPE_TO_ENUM(std::vector<LuminosityBlockID>, k_VLuminosityBlockID)
0052 TYPE_TO_ENUM(InputTag, k_InputTag)
0053 TYPE_TO_ENUM(std::vector<InputTag>, k_VInputTag)
0054 TYPE_TO_ENUM(ESInputTag, k_ESInputTag)
0055 TYPE_TO_ENUM(std::vector<ESInputTag>, k_VESInputTag)
0056 TYPE_TO_ENUM(FileInPath, k_FileInPath)
0057 TYPE_TO_ENUM(LuminosityBlockRange, k_LuminosityBlockRange)
0058 TYPE_TO_ENUM(std::vector<LuminosityBlockRange>, k_VLuminosityBlockRange)
0059 TYPE_TO_ENUM(EventRange, k_EventRange)
0060 TYPE_TO_ENUM(std::vector<EventRange>, k_VEventRange)
0061
0062
0063
0064
0065
0066
0067 std::string parameterTypeEnumToString(ParameterTypes iType) {
0068 switch (iType) {
0069 TYPE_TO_NAME(int32);
0070 TYPE_TO_NAME(vint32);
0071 TYPE_TO_NAME(uint32);
0072 TYPE_TO_NAME(vuint32);
0073 TYPE_TO_NAME(int64);
0074 TYPE_TO_NAME(vint64);
0075 TYPE_TO_NAME(uint64);
0076 TYPE_TO_NAME(vuint64);
0077 TYPE_TO_NAME(double);
0078 TYPE_TO_NAME(vdouble);
0079 TYPE_TO_NAME(bool);
0080 TYPE_TO_NAME2(k_stringRaw, string);
0081 TYPE_TO_NAME2(k_vstringRaw, vstring);
0082 TYPE_TO_NAME(EventID);
0083 TYPE_TO_NAME(VEventID);
0084 TYPE_TO_NAME(LuminosityBlockID);
0085 TYPE_TO_NAME(VLuminosityBlockID);
0086 TYPE_TO_NAME(InputTag);
0087 TYPE_TO_NAME(VInputTag);
0088 TYPE_TO_NAME(ESInputTag);
0089 TYPE_TO_NAME(VESInputTag);
0090 TYPE_TO_NAME(FileInPath);
0091 TYPE_TO_NAME(PSet);
0092 TYPE_TO_NAME(VPSet);
0093 TYPE_TO_NAME(LuminosityBlockRange);
0094 TYPE_TO_NAME(VLuminosityBlockRange);
0095 TYPE_TO_NAME(EventRange);
0096 TYPE_TO_NAME(VEventRange);
0097 default:
0098 assert(false);
0099 }
0100 return "";
0101 }
0102
0103 Comment::Comment() {}
0104 Comment::Comment(std::string const& iComment) : comment_(iComment) {}
0105 Comment::Comment(char const* iComment) : comment_(iComment) {}
0106
0107 ParameterDescriptionNode::~ParameterDescriptionNode() {}
0108
0109 void ParameterDescriptionNode::setComment(std::string const& value) { comment_ = value; }
0110
0111 void ParameterDescriptionNode::setComment(char const* value) { comment_ = value; }
0112
0113 void ParameterDescriptionNode::print(std::ostream& os,
0114 Modifier modifier,
0115 bool writeToCfi,
0116 DocFormatHelper& dfh) const {
0117 if (hasNestedContent()) {
0118 dfh.incrementCounter();
0119 }
0120 print_(os, modifier, writeToCfi, dfh);
0121 }
0122
0123 void ParameterDescriptionNode::printNestedContent(std::ostream& os, bool optional, DocFormatHelper& dfh) const {
0124 if (hasNestedContent()) {
0125 dfh.incrementCounter();
0126 printNestedContent_(os, optional, dfh);
0127 }
0128 }
0129
0130 void ParameterDescriptionNode::printSpaces(std::ostream& os, int n) {
0131 char oldFill = os.fill(' ');
0132 os.width(n);
0133 os << "";
0134 os.fill(oldFill);
0135 }
0136
0137
0138
0139 std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool caseValue, ParameterDescriptionNode const& node) {
0140 std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
0141 return caseValue >> std::move(clonedNode);
0142 }
0143
0144 std::unique_ptr<ParameterDescriptionCases<int>> operator>>(int caseValue, ParameterDescriptionNode const& node) {
0145 std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
0146 return caseValue >> std::move(clonedNode);
0147 }
0148
0149 std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
0150 ParameterDescriptionNode const& node) {
0151 std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
0152 return caseValue >> std::move(clonedNode);
0153 }
0154
0155 std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
0156 ParameterDescriptionNode const& node) {
0157 std::unique_ptr<ParameterDescriptionNode> clonedNode(node.clone());
0158 return caseValue >> std::move(clonedNode);
0159 }
0160
0161 std::unique_ptr<ParameterDescriptionCases<bool>> operator>>(bool caseValue,
0162 std::unique_ptr<ParameterDescriptionNode> node) {
0163 return std::unique_ptr<ParameterDescriptionCases<bool>>(
0164 new ParameterDescriptionCases<bool>(caseValue, std::move(node)));
0165 }
0166
0167 std::unique_ptr<ParameterDescriptionCases<int>> operator>>(int caseValue,
0168 std::unique_ptr<ParameterDescriptionNode> node) {
0169 return std::unique_ptr<ParameterDescriptionCases<int>>(
0170 new ParameterDescriptionCases<int>(caseValue, std::move(node)));
0171 }
0172
0173 std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(std::string const& caseValue,
0174 std::unique_ptr<ParameterDescriptionNode> node) {
0175 return std::unique_ptr<ParameterDescriptionCases<std::string>>(
0176 new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
0177 }
0178
0179 std::unique_ptr<ParameterDescriptionCases<std::string>> operator>>(char const* caseValue,
0180 std::unique_ptr<ParameterDescriptionNode> node) {
0181 std::string caseValueString(caseValue);
0182 return std::unique_ptr<ParameterDescriptionCases<std::string>>(
0183 new ParameterDescriptionCases<std::string>(caseValue, std::move(node)));
0184 }
0185
0186
0187
0188 std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
0189 ParameterDescriptionNode const& node_right) {
0190 return std::make_unique<ANDGroupDescription>(node_left, node_right);
0191 }
0192
0193 std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
0194 ParameterDescriptionNode const& node_right) {
0195 return std::make_unique<ANDGroupDescription>(std::move(node_left), node_right);
0196 }
0197
0198 std::unique_ptr<ParameterDescriptionNode> operator&&(ParameterDescriptionNode const& node_left,
0199 std::unique_ptr<ParameterDescriptionNode> node_right) {
0200 return std::make_unique<ANDGroupDescription>(node_left, std::move(node_right));
0201 }
0202
0203 std::unique_ptr<ParameterDescriptionNode> operator&&(std::unique_ptr<ParameterDescriptionNode> node_left,
0204 std::unique_ptr<ParameterDescriptionNode> node_right) {
0205 return std::make_unique<ANDGroupDescription>(std::move(node_left), std::move(node_right));
0206 }
0207
0208
0209
0210 std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
0211 ParameterDescriptionNode const& node_right) {
0212 return std::make_unique<ORGroupDescription>(node_left, node_right);
0213 }
0214
0215 std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
0216 ParameterDescriptionNode const& node_right) {
0217 return std::make_unique<ORGroupDescription>(std::move(node_left), node_right);
0218 }
0219
0220 std::unique_ptr<ParameterDescriptionNode> operator||(ParameterDescriptionNode const& node_left,
0221 std::unique_ptr<ParameterDescriptionNode> node_right) {
0222 return std::make_unique<ORGroupDescription>(node_left, std::move(node_right));
0223 }
0224
0225 std::unique_ptr<ParameterDescriptionNode> operator||(std::unique_ptr<ParameterDescriptionNode> node_left,
0226 std::unique_ptr<ParameterDescriptionNode> node_right) {
0227 return std::make_unique<ORGroupDescription>(std::move(node_left), std::move(node_right));
0228 }
0229
0230
0231
0232 std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
0233 ParameterDescriptionNode const& node_right) {
0234 return std::make_unique<XORGroupDescription>(node_left, node_right);
0235 }
0236
0237 std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
0238 ParameterDescriptionNode const& node_right) {
0239 return std::make_unique<XORGroupDescription>(std::move(node_left), node_right);
0240 }
0241
0242 std::unique_ptr<ParameterDescriptionNode> operator^(ParameterDescriptionNode const& node_left,
0243 std::unique_ptr<ParameterDescriptionNode> node_right) {
0244 return std::make_unique<XORGroupDescription>(node_left, std::move(node_right));
0245 }
0246
0247 std::unique_ptr<ParameterDescriptionNode> operator^(std::unique_ptr<ParameterDescriptionNode> node_left,
0248 std::unique_ptr<ParameterDescriptionNode> node_right) {
0249 return std::make_unique<XORGroupDescription>(std::move(node_left), std::move(node_right));
0250 }
0251 }