CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_5_3_0/src/FWCore/ParameterSet/src/ParameterDescriptionNode.cc

Go to the documentation of this file.
00001 
00002 #include "FWCore/ParameterSet/interface/ParameterDescriptionNode.h"
00003 #include "FWCore/ParameterSet/interface/ParameterDescriptionCases.h"
00004 #include "FWCore/ParameterSet/interface/ANDGroupDescription.h"
00005 #include "FWCore/ParameterSet/interface/ORGroupDescription.h"
00006 #include "FWCore/ParameterSet/interface/XORGroupDescription.h"
00007 #include "FWCore/ParameterSet/interface/DocFormatHelper.h"
00008 
00009 #include <vector>
00010 #include <cassert>
00011 #include <ostream>
00012 
00013 #define TYPE_TO_ENUM(type,e_val) template<> ParameterTypes ParameterTypeToEnum::toEnum<type >(){ return e_val; }
00014 #define TYPE_TO_NAME(type) case k_ ## type: return #type
00015 
00016 namespace edm {
00017 
00018   class EventID;
00019   class LuminosityBlockID;
00020   class LuminosityBlockRange;
00021   class EventRange;
00022   class InputTag;
00023   class FileInPath;
00024 
00025   TYPE_TO_ENUM(int,k_int32)
00026   TYPE_TO_ENUM(std::vector<int>,k_vint32)
00027   TYPE_TO_ENUM(unsigned,k_uint32)
00028   TYPE_TO_ENUM(std::vector<unsigned>,k_vuint32)
00029   TYPE_TO_ENUM(long long,k_int64)
00030   TYPE_TO_ENUM(std::vector<long long>,k_vint64)
00031   TYPE_TO_ENUM(unsigned long long,k_uint64)
00032   TYPE_TO_ENUM(std::vector<unsigned long long>,k_vuint64)
00033   TYPE_TO_ENUM(double,k_double)
00034   TYPE_TO_ENUM(std::vector<double>,k_vdouble)
00035   TYPE_TO_ENUM(bool,k_bool)
00036   TYPE_TO_ENUM(std::string,k_string)
00037   TYPE_TO_ENUM(std::vector<std::string>,k_vstring)
00038   TYPE_TO_ENUM(EventID,k_EventID)
00039   TYPE_TO_ENUM(std::vector<EventID>,k_VEventID)
00040   TYPE_TO_ENUM(LuminosityBlockID,k_LuminosityBlockID)
00041   TYPE_TO_ENUM(std::vector<LuminosityBlockID>,k_VLuminosityBlockID)
00042   TYPE_TO_ENUM(InputTag,k_InputTag)
00043   TYPE_TO_ENUM(std::vector<InputTag>,k_VInputTag)
00044   TYPE_TO_ENUM(FileInPath,k_FileInPath)
00045   TYPE_TO_ENUM(LuminosityBlockRange,k_LuminosityBlockRange)
00046   TYPE_TO_ENUM(std::vector<LuminosityBlockRange>,k_VLuminosityBlockRange)
00047   TYPE_TO_ENUM(EventRange,k_EventRange)
00048   TYPE_TO_ENUM(std::vector<EventRange>,k_VEventRange)
00049   // These are intentionally not implemented to prevent one
00050   // from calling add<ParameterSet>.  One should call
00051   // add<ParameterSetDescription> instead.
00052   // TYPE_TO_ENUM(ParameterSet,k_PSet)
00053   // TYPE_TO_ENUM(std::vector<ParameterSet>,k_VPSet)
00054 
00055   std::string parameterTypeEnumToString(ParameterTypes iType) {
00056     switch(iType) {
00057       TYPE_TO_NAME(int32);
00058       TYPE_TO_NAME(vint32);
00059       TYPE_TO_NAME(uint32);
00060       TYPE_TO_NAME(vuint32);
00061       TYPE_TO_NAME(int64);
00062       TYPE_TO_NAME(vint64);
00063       TYPE_TO_NAME(uint64);
00064       TYPE_TO_NAME(vuint64);
00065       TYPE_TO_NAME(double);
00066       TYPE_TO_NAME(vdouble);
00067       TYPE_TO_NAME(bool);
00068       TYPE_TO_NAME(string);
00069       TYPE_TO_NAME(vstring);
00070       TYPE_TO_NAME(EventID);
00071       TYPE_TO_NAME(VEventID);
00072       TYPE_TO_NAME(LuminosityBlockID);
00073       TYPE_TO_NAME(VLuminosityBlockID);
00074       TYPE_TO_NAME(InputTag);
00075       TYPE_TO_NAME(VInputTag);
00076       TYPE_TO_NAME(FileInPath);
00077       TYPE_TO_NAME(PSet);
00078       TYPE_TO_NAME(VPSet);
00079       TYPE_TO_NAME(LuminosityBlockRange);
00080       TYPE_TO_NAME(VLuminosityBlockRange);
00081       TYPE_TO_NAME(EventRange);
00082       TYPE_TO_NAME(VEventRange);
00083     default:
00084       assert(false);
00085     }
00086     return "";
00087   }
00088 
00089   ParameterDescriptionNode::~ParameterDescriptionNode() {
00090   }
00091 
00092   void
00093   ParameterDescriptionNode::setComment(std::string const& value) {
00094     comment_ = value;
00095   }
00096 
00097   void
00098   ParameterDescriptionNode::setComment(char const* value) {
00099     comment_ = value;
00100   }
00101 
00102   void
00103   ParameterDescriptionNode::print(std::ostream& os,
00104                                   bool optional,
00105                                   bool writeToCfi,
00106                                   DocFormatHelper& dfh) {
00107     if (hasNestedContent()) {
00108       dfh.incrementCounter();
00109     }
00110     print_(os, optional, writeToCfi, dfh);
00111   }
00112 
00113   void
00114   ParameterDescriptionNode::printNestedContent(std::ostream& os,
00115                                                bool optional,
00116                                                DocFormatHelper& dfh) {
00117     if (hasNestedContent()) {
00118       dfh.incrementCounter();
00119       printNestedContent_(os, optional, dfh);
00120     }
00121   }
00122 
00123   void
00124   ParameterDescriptionNode::printSpaces(std::ostream& os, int n) {
00125     char oldFill = os.fill(' ');
00126     os.width(n);
00127     os << "";
00128     os.fill(oldFill);
00129   }
00130 
00131   // operator>> ---------------------------------------------
00132 
00133   std::auto_ptr<ParameterDescriptionCases<bool> >
00134   operator>>(bool caseValue,
00135              ParameterDescriptionNode const& node) {
00136     std::auto_ptr<ParameterDescriptionNode> clonedNode(node.clone());
00137     return caseValue >> clonedNode;
00138   }
00139 
00140   std::auto_ptr<ParameterDescriptionCases<int> >
00141   operator>>(int caseValue,
00142              ParameterDescriptionNode const& node) {
00143     std::auto_ptr<ParameterDescriptionNode> clonedNode(node.clone());
00144     return caseValue >> clonedNode;
00145   }
00146 
00147   std::auto_ptr<ParameterDescriptionCases<std::string> >
00148   operator>>(std::string const& caseValue,
00149              ParameterDescriptionNode const& node) {
00150     std::auto_ptr<ParameterDescriptionNode> clonedNode(node.clone());
00151     return caseValue >> clonedNode;
00152   }
00153 
00154   std::auto_ptr<ParameterDescriptionCases<std::string> >
00155   operator>>(char const* caseValue,
00156              ParameterDescriptionNode const& node) {
00157     std::auto_ptr<ParameterDescriptionNode> clonedNode(node.clone());
00158     return caseValue >> clonedNode;
00159   }
00160 
00161   std::auto_ptr<ParameterDescriptionCases<bool> >
00162   operator>>(bool caseValue,
00163              std::auto_ptr<ParameterDescriptionNode> node) {
00164     return std::auto_ptr<ParameterDescriptionCases<bool> >(
00165       new ParameterDescriptionCases<bool>(caseValue, node));
00166   }
00167 
00168   std::auto_ptr<ParameterDescriptionCases<int> >
00169   operator>>(int caseValue,
00170              std::auto_ptr<ParameterDescriptionNode> node) {
00171     return std::auto_ptr<ParameterDescriptionCases<int> >(
00172       new ParameterDescriptionCases<int>(caseValue, node));
00173   }
00174 
00175   std::auto_ptr<ParameterDescriptionCases<std::string> >
00176   operator>>(std::string const& caseValue,
00177              std::auto_ptr<ParameterDescriptionNode> node) {
00178     return std::auto_ptr<ParameterDescriptionCases<std::string> >(
00179       new ParameterDescriptionCases<std::string>(caseValue, node));
00180   }
00181 
00182   std::auto_ptr<ParameterDescriptionCases<std::string> >
00183   operator>>(char const* caseValue,
00184              std::auto_ptr<ParameterDescriptionNode> node) {
00185     std::string caseValueString(caseValue);
00186     return std::auto_ptr<ParameterDescriptionCases<std::string> >(
00187       new ParameterDescriptionCases<std::string>(caseValue, node));
00188   }
00189 
00190   // operator&& ---------------------------------------------
00191 
00192   std::auto_ptr<ParameterDescriptionNode>
00193   operator&&(ParameterDescriptionNode const& node_left,
00194              ParameterDescriptionNode const& node_right) {
00195     return std::auto_ptr<ParameterDescriptionNode>(new ANDGroupDescription(node_left, node_right));
00196   }
00197 
00198   std::auto_ptr<ParameterDescriptionNode>
00199   operator&&(std::auto_ptr<ParameterDescriptionNode> node_left,
00200              ParameterDescriptionNode const& node_right) {
00201     return std::auto_ptr<ParameterDescriptionNode>(new ANDGroupDescription(node_left, node_right));
00202   }
00203 
00204   std::auto_ptr<ParameterDescriptionNode>
00205   operator&&(ParameterDescriptionNode const& node_left,
00206              std::auto_ptr<ParameterDescriptionNode> node_right) {
00207     return std::auto_ptr<ParameterDescriptionNode>(new ANDGroupDescription(node_left, node_right));
00208   }
00209 
00210   std::auto_ptr<ParameterDescriptionNode>
00211   operator&&(std::auto_ptr<ParameterDescriptionNode> node_left,
00212              std::auto_ptr<ParameterDescriptionNode> node_right) {
00213     return std::auto_ptr<ParameterDescriptionNode>(new ANDGroupDescription(node_left, node_right));
00214   }
00215 
00216   // operator|| ---------------------------------------------
00217 
00218   std::auto_ptr<ParameterDescriptionNode>
00219   operator||(ParameterDescriptionNode const& node_left,
00220              ParameterDescriptionNode const& node_right) {
00221     return std::auto_ptr<ParameterDescriptionNode>(new ORGroupDescription(node_left, node_right));
00222   }
00223 
00224   std::auto_ptr<ParameterDescriptionNode>
00225   operator||(std::auto_ptr<ParameterDescriptionNode> node_left,
00226              ParameterDescriptionNode const& node_right) {
00227     return std::auto_ptr<ParameterDescriptionNode>(new ORGroupDescription(node_left, node_right));
00228   }
00229 
00230   std::auto_ptr<ParameterDescriptionNode>
00231   operator||(ParameterDescriptionNode const& node_left,
00232              std::auto_ptr<ParameterDescriptionNode> node_right) {
00233     return std::auto_ptr<ParameterDescriptionNode>(new ORGroupDescription(node_left, node_right));
00234   }
00235 
00236   std::auto_ptr<ParameterDescriptionNode>
00237   operator||(std::auto_ptr<ParameterDescriptionNode> node_left,
00238              std::auto_ptr<ParameterDescriptionNode> node_right) {
00239     return std::auto_ptr<ParameterDescriptionNode>(new ORGroupDescription(node_left, node_right));
00240   }
00241 
00242   // operator^  ---------------------------------------------
00243 
00244   std::auto_ptr<ParameterDescriptionNode>
00245   operator^(ParameterDescriptionNode const& node_left,
00246             ParameterDescriptionNode const& node_right) {
00247     return std::auto_ptr<ParameterDescriptionNode>(new XORGroupDescription(node_left, node_right));
00248   }
00249 
00250   std::auto_ptr<ParameterDescriptionNode>
00251   operator^(std::auto_ptr<ParameterDescriptionNode> node_left,
00252             ParameterDescriptionNode const& node_right) {
00253     return std::auto_ptr<ParameterDescriptionNode>(new XORGroupDescription(node_left, node_right));
00254   }
00255 
00256   std::auto_ptr<ParameterDescriptionNode>
00257   operator^(ParameterDescriptionNode const& node_left,
00258             std::auto_ptr<ParameterDescriptionNode> node_right) {
00259     return std::auto_ptr<ParameterDescriptionNode>(new XORGroupDescription(node_left, node_right));
00260   }
00261 
00262   std::auto_ptr<ParameterDescriptionNode>
00263   operator^(std::auto_ptr<ParameterDescriptionNode> node_left,
00264             std::auto_ptr<ParameterDescriptionNode> node_right) {
00265     return std::auto_ptr<ParameterDescriptionNode>(new XORGroupDescription(node_left, node_right));
00266   }
00267 }