Go to the documentation of this file.00001 #ifndef DDValue_h
00002 #define DDValue_h
00003 #include <iostream>
00004 #include <string>
00005 #include <vector>
00006 #include <map>
00007 #include <memory>
00008
00009 #include "DetectorDescription/Core/interface/DDValuePair.h"
00010 #include "DetectorDescription/Base/interface/Ptr.h"
00011
00012 #include "boost/shared_ptr.hpp"
00013
00014 class DDValue;
00015 class DDSpecifics;
00016 class DDLSpecPar;
00017
00018
00026 class DDValue
00027 {
00028 friend class DDSpecifics;
00029 friend class DDLSpecPar;
00030 public:
00032 DDValue() : id_(0), vecPair_(0) { }
00033
00035 DDValue(const std::string &);
00036
00038 DDValue(const char *);
00039
00040 void init(const std::string &);
00041
00043 explicit DDValue(const std::string &, const std::vector<DDValuePair>&);
00044
00046 explicit DDValue(const std::string &, double);
00047
00049 explicit DDValue(const std::string &, const std::string &, double);
00050
00052 explicit DDValue(const std::string & name, const std::string & val);
00053
00054 explicit DDValue(unsigned int);
00055
00056
00057
00058
00059
00060 ~DDValue();
00061
00063 unsigned int id() const { return id_; }
00064
00066 operator unsigned int() const { return id_; }
00067
00069 const std::string & name() const { return names()[id_]; }
00070
00073 DDValuePair operator[](unsigned int i) const;
00074
00076 const std::vector<std::string> & strings() const { return vecPair_->second.first; }
00077
00079 const std::vector<double> & doubles() const;
00080
00081
00083 unsigned int size() const {
00084 return vecPair_ ? vecPair_->second.first.size() : 0 ;
00085 }
00086
00087 static void clear();
00088
00090 void setEvalState(bool newState);
00091
00093
00095 bool isEvaluated() const;
00096
00098
00100 bool operator==(const DDValue & v) const;
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00116 bool operator<(const DDValue &) const;
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129 private:
00130 typedef std::pair<bool, std::pair<std::vector<std::string>, std::vector<double> > >vecpair_type;
00131 static std::vector<std::string>& names();
00132 static std::map<std::string,unsigned int>& indexer();
00133 static std::vector<boost::shared_ptr<vecpair_type> >& mem(vecpair_type*);
00134
00135
00136
00137
00138
00139 unsigned int id_;
00140
00141
00142 public:
00143 vecpair_type* vecPair_;
00144
00145 public:
00146
00147
00148
00149 };
00150
00151
00152 std::ostream & operator<<(std::ostream & o, const DDValue & v);
00153 #endif // DDValue_h