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