CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
ClassID.h
Go to the documentation of this file.
1 #ifndef CondCoreDBCommon_ClassID_H
2 #define CondCoreDBCommon_ClassID_H
3 #include <typeinfo>
4 #include<vector>
5 #include<string>
6 
7 namespace cond {
8 
9  namespace idCategories {
10  std::string const dictIDCategory("LCGDictID");
11  std::string const pythonIDCategory("CondPythonID");
12  }
13 
14 
15 
16  char const * className(const std::type_info& t);
17 
18  class ClassIDRegistry;
19 
20  class ClassInfo {
21  public:
22  virtual ~ClassInfo(){}
23  inline ClassInfo(const std::type_info& t) : tinfo(t) {}
24  inline ClassInfo(const std::type_info& t, int);
25  inline const std::type_info& type() const { return tinfo;}
26  std::string pluginName(std::string const & prefix) const;
27  virtual std::string resource() const=0;
28  private:
30  const char * registerMe(const std::type_info& t);
31  const std::type_info& tinfo;
32  };
33 
34 
36  public:
37  typedef ClassInfo Elem;
38  std::vector<std::string> sids;
39  std::vector<const char*> csids;
40  ClassIDRegistry(std::string const & pfix);
41 
42  const char * registerMe(const std::type_info& t);
43 
44  private:
45  std::string prefix;
46 
47  };
48 
49  template<typename T>
50  struct ClassID : public ClassInfo {
51  ClassID() : ClassInfo(typeid(T)) {}
52  ClassID(char const * res ) : ClassInfo(typeid(T)), m_res(res) {}
53  ClassID(int i) : ClassInfo(typeid(T),i) {}
54  virtual std::string resource() const { return m_res;}
55  private:
56  std::string m_res;
57  };
58 
59 
60 }
61 
62 // magic: works only if a file local registry exists in the file
63 #define ELEM_CONSTR(xx_) \
64  cond::ClassInfo::ClassInfo(const std::type_info& t,int) : tinfo(t) {registry = &xx_;registerMe(t);}
65 
66 
68 namespace cond{
70 }
71 
72 #define CLASS_ID(type_) \
73 namespace{ cond::ClassID<type_> EDM_PLUGIN_SYM(instance_cld, __LINE__)(0); } \
74  DEFINE_EDM_PLUGIN(cond::ClassInfoFactory, cond::ClassID<type_> , cond::ClassID<type_>().pluginName(cond::idCategories::dictIDCategory).c_str() )
75 
76 #define PYTHON_ID(type_, plugName_, uname_) \
77  namespace pythonID { struct EDM_PLUGIN_SYM(plugName_, uname_) : public cond::ClassID<type_> { EDM_PLUGIN_SYM(plugName_ , uname_) () : cond::ClassID<type_>(::plugName_){}};} \
78  DEFINE_EDM_PLUGIN(cond::ClassInfoFactory, EDM_PLUGIN_SYM(pythonID::plugName_, uname_) , EDM_PLUGIN_SYM(pythonID::plugName_, uname_)().pluginName(cond::idCategories::pythonIDCategory).c_str() )
79 
80 
81 #endif // CondCoreDBCommon_ClassID_H
int i
Definition: DBlmapReader.cc:9
std::string const pythonIDCategory("CondPythonID")
std::string const dictIDCategory("LCGDictID")
const std::type_info & tinfo
Definition: ClassID.h:31
virtual ~ClassInfo()
Definition: ClassID.h:22
std::vector< std::string > sids
Definition: ClassID.h:38
virtual std::string resource() const
Definition: ClassID.h:54
std::string prefix
Definition: ClassID.h:45
ClassInfo(const std::type_info &t)
Definition: ClassID.h:23
const std::type_info & type() const
Definition: ClassID.h:25
const char * registerMe(const std::type_info &t)
Definition: ClassID.cc:50
ClassIDRegistry(std::string const &pfix)
Definition: ClassID.cc:48
ClassID(char const *res)
Definition: ClassID.h:52
std::vector< const char * > csids
Definition: ClassID.h:39
virtual std::string resource() const =0
ClassID(int i)
Definition: ClassID.h:53
ClassIDRegistry * registry
Definition: ClassID.h:29
ClassInfo Elem
Definition: ClassID.h:37
std::string m_res
Definition: ClassID.h:56
const char * registerMe(const std::type_info &t)
Definition: ClassID.cc:56
edmplugin::PluginFactory< ClassInfo *() > ClassInfoFactory
Definition: ClassID.h:69
std::string pluginName(std::string const &prefix) const
Definition: ClassID.cc:60
char const * className(const std::type_info &t)
Definition: ClassID.cc:8
long double T