CMS 3D CMS Logo

/data/refman/pasoursint/CMSSW_4_4_5_patch3/src/FWCore/ParameterSet/interface/ParameterSwitchBase.h

Go to the documentation of this file.
00001 #ifndef FWCore_ParameterSet_ParameterSwitchBase_h
00002 #define FWCore_ParameterSet_ParameterSwitchBase_h
00003 
00004 #include "FWCore/ParameterSet/interface/ParameterDescriptionNode.h"
00005 #include "FWCore/Utilities/interface/value_ptr.h"
00006 
00007 #include <string>
00008 #include <set>
00009 #include <utility>
00010 #include <iosfwd>
00011 
00012 namespace edm {
00013 
00014   class DocFormatHelper;
00015 
00016   class ParameterSwitchBase : public ParameterDescriptionNode {
00017   public:
00018     virtual ~ParameterSwitchBase();
00019 
00020   protected:
00021     void insertAndCheckLabels(std::string const& switchLabel,
00022                               std::set<std::string> & usedLabels,
00023                               std::set<std::string> & labels) const;
00024 
00025     void insertAndCheckTypes(ParameterTypes switchType,
00026                       std::set<ParameterTypes> const& caseParameterTypes,
00027                       std::set<ParameterTypes> const& caseWildcardTypes,
00028                       std::set<ParameterTypes> & parameterTypes,
00029                       std::set<ParameterTypes> & wildcardTypes) const;
00030 
00031     void throwDuplicateCaseValues(std::string const& switchLabel) const;
00032 
00033     void throwNoCaseForDefault(std::string const& switchLabel) const;
00034 
00035     void throwNoCaseForSwitchValue(std::string const& message) const;
00036 
00037     void printBase(std::ostream & os,
00038                    bool optional,
00039                    bool writeToCfi,
00040                    DocFormatHelper & dfh,
00041                    std::string const& switchLabel,
00042                    bool isTracked,
00043                    std::string const& typeString) const;
00044 
00045     virtual bool hasNestedContent_();
00046 
00047     void printNestedContentBase(std::ostream & os,
00048                                 DocFormatHelper & dfh,
00049                                 DocFormatHelper & new_dfh,
00050                                 std::string const& switchLabel);
00051 
00052     template <typename T>
00053     static void printCaseT(std::pair<T, edm::value_ptr<ParameterDescriptionNode> > const& p,
00054                            std::ostream & os,
00055                            bool optional,
00056                            DocFormatHelper & dfh,
00057                            std::string const& switchLabel) {
00058       ParameterSwitchBase::printCase(p, os, optional, dfh, switchLabel);
00059     }
00060 
00061   private:
00062 
00063     static void printCase(std::pair<bool, edm::value_ptr<ParameterDescriptionNode> > const& p,
00064                           std::ostream & os,
00065                           bool optional,
00066                           DocFormatHelper & dfh,
00067                           std::string const& switchLabel);
00068 
00069     static void printCase(std::pair<int, edm::value_ptr<ParameterDescriptionNode> > const& p,
00070                           std::ostream & os,
00071                           bool optional,
00072                           DocFormatHelper & dfh,
00073                           std::string const& switchLabel);
00074 
00075     static void printCase(std::pair<std::string, edm::value_ptr<ParameterDescriptionNode> > const& p,
00076                           std::ostream & os,
00077                           bool optional,
00078                           DocFormatHelper & dfh,
00079                           std::string const& switchLabel);
00080 
00081     virtual bool partiallyExists_(ParameterSet const& pset) const;
00082 
00083     virtual int howManyXORSubNodesExist_(ParameterSet const& pset) const;
00084 
00085   };
00086 }
00087 
00088 #endif