ATLAS Offline Software
CLIDRegistry.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration.
3  */
4 
5 #ifndef ATHENAKERNEL_CLIDREGISTRY_H
6 # define ATHENAKERNEL_CLIDREGISTRY_H
7 
14 #include "GaudiKernel/ClassID.h"
15 
16 #include <vector>
17 #include <string>
18 #include <tuple>
19 #include <typeinfo>
20 
21 namespace CLIDdetail {
23 
24  const unsigned long MINCLID = 256;
25  const unsigned long MAXCLID = 2147483647;
26 
27 }
28 
29 class CLIDRegistryImpl;
30 
35 class CLIDRegistry {
36 public:
37  typedef std::tuple <unsigned long,
38  std::string,
39  std::string> tuple_t;
40  typedef std::vector< tuple_t > CLIDVector_t;
41 
43  template <unsigned long CLID>
44  static bool addEntry(const std::type_info& ti,
45  const char* typeName,
46  const std::string& typeInfoName);
47 
49 
50  static bool hasNewEntries();
54  static CLIDVector_t newEntries();
56 
58  static const std::type_info* CLIDToTypeinfo (CLID clid);
59  static CLID typeinfoToCLID (const std::type_info& ti);
60 
61 
63  static bool addEntry (unsigned long clid,
64  const std::type_info& ti,
65  const char* typeName,
66  const std::string& typeInfoName);
67 
68 private:
69  static CLIDRegistryImpl& impl();
70 };
71 
72 
73 template <unsigned long CLID>
74 bool CLIDRegistry::addEntry(const std::type_info& ti,
75  const char* typeName,
76  const std::string& typeInfoName) {
77  static_assert (CLIDdetail::MINCLID <= CLID && CLID <= CLIDdetail::MAXCLID,
78  "CLID out of CLIDRegistry range");
79 
80  addEntry (CLID, ti, typeName, typeInfoName);
81  return true;
82 }
83 
84 
85 #endif // ATHENAKERNEL_CLIDREGISTRY_H
CLIDRegistry::newEntries
static CLIDVector_t newEntries()
returns an iterator range over the entries added since last time newEntries was called
Definition: CLIDRegistry.cxx:117
CLIDdetail::MINCLID
const unsigned long MINCLID
Definition: CLIDRegistry.h:24
CLIDRegistry::typeinfoToCLID
static CLID typeinfoToCLID(const std::type_info &ti)
Return the CLID corresponding to a type_info.
Definition: CLIDRegistry.cxx:148
CLIDRegistry::addEntry
static bool addEntry(const std::type_info &ti, const char *typeName, const std::string &typeInfoName)
to be called by the CLASS_DEFS
Definition: CLIDRegistry.h:74
CLIDRegistry::CLIDToTypeinfo
static const std::type_info * CLIDToTypeinfo(CLID clid)
Translate between CLID and type_info.
Definition: CLIDRegistry.cxx:136
CLIDdetail::MAXCLID
const unsigned long MAXCLID
2**31 - 1
Definition: CLIDRegistry.h:25
CLIDRegistry::tuple_t
std::tuple< unsigned long, std::string, std::string > tuple_t
Definition: CLIDRegistry.h:39
CLIDRegistry::hasNewEntries
static bool hasNewEntries()
registry accessors (used by ClassIDSvc)
Definition: CLIDRegistry.cxx:111
CLID
uint32_t CLID
The Class ID type.
Definition: Event/xAOD/xAODCore/xAODCore/ClassID_traits.h:47
CLIDRegistry
a static registry of CLID->typeName entries. NOT for general use. Use ClassIDSvc instead.
Definition: CLIDRegistry.h:35
CLIDRegistry::impl
static CLIDRegistryImpl & impl()
Definition: CLIDRegistry.cxx:123
CLIDRegistryImpl
Definition: CLIDRegistry.cxx:12
ReadCalibFromCool.typeName
typeName
Definition: ReadCalibFromCool.py:477
CLIDdetail
Definition: CLIDRegistry.h:21
CLIDRegistry::CLIDVector_t
std::vector< tuple_t > CLIDVector_t
Definition: CLIDRegistry.h:40