Go to the documentation of this file.00001 #ifndef FWCore_ParameterSet_ParameterDescriptionCases_h
00002 #define FWCore_ParameterSet_ParameterDescriptionCases_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #include "FWCore/Utilities/interface/value_ptr.h"
00028 #include "FWCore/ParameterSet/interface/ParameterDescriptionNode.h"
00029
00030 #include <map>
00031 #include <memory>
00032 #include <string>
00033 #include <utility>
00034
00035 namespace edm {
00036
00037 template<typename T>
00038 class ParameterDescriptionCases {
00039 public:
00040 typedef std::map<T, edm::value_ptr<ParameterDescriptionNode> > CaseMap;
00041
00042 void insert(T caseValue, std::auto_ptr<ParameterDescriptionNode> node) {
00043 std::pair<T, edm::value_ptr<ParameterDescriptionNode> > casePair(caseValue,edm::value_ptr<ParameterDescriptionNode>());
00044 std::pair<typename CaseMap::iterator,bool> status;
00045 status = caseMap_->insert(casePair);
00046 (*caseMap_)[caseValue] = node;
00047 if (status.second == false) duplicateCaseValues_ = true;
00048 }
00049
00050 std::auto_ptr<CaseMap> caseMap() { return caseMap_; }
00051 bool duplicateCaseValues() const { return duplicateCaseValues_; }
00052
00053 private:
00054
00055 friend
00056 std::auto_ptr<ParameterDescriptionCases<bool> >
00057 operator>>(bool caseValue,
00058 std::auto_ptr<ParameterDescriptionNode> node);
00059
00060 friend
00061 std::auto_ptr<ParameterDescriptionCases<int> >
00062 operator>>(int caseValue,
00063 std::auto_ptr<ParameterDescriptionNode> node);
00064
00065 friend
00066 std::auto_ptr<ParameterDescriptionCases<std::string> >
00067 operator>>(std::string const& caseValue,
00068 std::auto_ptr<ParameterDescriptionNode> node);
00069
00070 friend
00071 std::auto_ptr<ParameterDescriptionCases<std::string> >
00072 operator>>(char const* caseValue,
00073 std::auto_ptr<ParameterDescriptionNode> node);
00074
00075
00076
00077 ParameterDescriptionCases(T const& caseValue, std::auto_ptr<ParameterDescriptionNode> node) :
00078 caseMap_(new CaseMap),
00079 duplicateCaseValues_(false)
00080 {
00081 std::pair<T, edm::value_ptr<ParameterDescriptionNode> > casePair(caseValue,edm::value_ptr<ParameterDescriptionNode>());
00082 caseMap_->insert(casePair);
00083 (*caseMap_)[caseValue] = node;
00084 }
00085
00086 std::auto_ptr<CaseMap> caseMap_;
00087 bool duplicateCaseValues_;
00088 };
00089
00090 std::auto_ptr<ParameterDescriptionCases<bool> >
00091 operator||(std::auto_ptr<ParameterDescriptionCases<bool> >,
00092 std::auto_ptr<ParameterDescriptionCases<bool> >);
00093
00094 std::auto_ptr<ParameterDescriptionCases<int> >
00095 operator||(std::auto_ptr<ParameterDescriptionCases<int> >,
00096 std::auto_ptr<ParameterDescriptionCases<int> >);
00097
00098 std::auto_ptr<ParameterDescriptionCases<std::string> >
00099 operator||(std::auto_ptr<ParameterDescriptionCases<std::string> >,
00100 std::auto_ptr<ParameterDescriptionCases<std::string> >);
00101 }
00102 #endif