ATLAS Offline Software
Loading...
Searching...
No Matches
ClassIDSvc.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5#ifndef CLIDCOMPS_CLASSIDSVC_H
6# define CLIDCOMPS_CLASSIDSVC_H
12
13#include <unordered_map>
14#include <mutex>
15#include <string>
16#include <vector>
17#include <utility> // for std::pair
18
19#include "GaudiKernel/IIncidentListener.h"
20#include "GaudiKernel/IClassIDSvc.h"
21#include "GaudiKernel/Service.h"
22#include "GaudiKernel/DirSearchPath.h"
23
25
26
35
36class ClassIDSvc : public extends<Service, IClassIDSvc, IIncidentListener>
37{
38private:
39 typedef std::pair<std::string, std::string> TypeName; //typename+typeinfoname
40 typedef std::unordered_map<CLID, TypeName> CLIDMap;
41 typedef std::unordered_map<std::string, CLID> NameMap;
42
43public:
44 // Locking convention: public methods (except for gaudi state-change methods)
45 // take the lock. Protected/private methods do not take the lock.
46 // Public methods do not call each other.
47
48 //========================================================================
50
53 virtual CLID nextAvailableID() const override;
55 virtual bool isIDInUse(const CLID& id) const override;
57 virtual bool isNameInUse(const std::string& name) const override;
59 virtual StatusCode getTypeNameOfID(const CLID& id, std::string& typeName) const override;
61 virtual StatusCode getTypeInfoNameOfID(const CLID& id, std::string& typeInfoName) const override;
63 virtual StatusCode getIDOfTypeName(const std::string& typeName, CLID& id) const override;
65 virtual StatusCode getIDOfTypeInfoName(const std::string& typeInfoName, CLID& id) const override;
67 virtual StatusCode setTypeForID(const CLID& id,
68 const std::string& typeName,
69 const std::string& typeInfoName = "") override;
70
71 //========================================================================
73
75 void dump() const;
76
77
78 //========================================================================
80
82
83 virtual StatusCode initialize() override;
84 virtual StatusCode reinitialize() override;
86 virtual StatusCode finalize() override;
88
90 void handle(const Incident &inc) override;
91
92 // Standard Constructor
93 ClassIDSvc(const std::string& name, ISvcLocator* svc);
94
95private:
97 std::vector<CLID> sortedIDs() const;
98
100 StatusCode fillDB();
102 bool processCLIDDB(const std::string& fileName);
104 bool getRegistryEntries(const std::string& moduleName);
105
107 StatusCode
109 const std::string& typeName,
110 const std::string& typeInfoName);
111
113 bool maybeRescan() const;
114
116
117 Gaudi::Property<std::vector<std::string>> m_DBFiles{this, "CLIDDBFiles", {"clid.db"},
118 "List of db files with (CLID, class_name) entries. Loaded at init in svc maps. Files are looked up in DATAPATH",
119 "OrderedSet<std::string>"};
120
121 Gaudi::Property<std::string> m_outputFileName{this, "OutputFileName", "NULL",
122 "Path to clid.db file for writing. By default ('NULL') to not create the file."};
123
127
129 DirSearchPath m_clidDBPath;
130
131 // Mutex to protect internal structures.
132 typedef std::mutex mutex_t;
133 typedef std::lock_guard<mutex_t> lock_t;
135};
136
137
138#endif // CLIDCOMPS_CLASSIDSVC_H
a static registry of CLID->typeName entries.
uint32_t CLID
The Class ID type.
virtual StatusCode initialize() override
Gaudi Service Implementation.
StatusCode fillDB()
get clids from CLIDDB and from registry entries
NameMap m_tiNameMap
Definition ClassIDSvc.h:126
Gaudi::Property< std::vector< std::string > > m_DBFiles
Definition ClassIDSvc.h:117
bool processCLIDDB(const std::string &fileName)
load clid/names from a "db" file
virtual StatusCode reinitialize() override
CLIDMap m_clidMap
Definition ClassIDSvc.h:124
void handle(const Incident &inc) override
implement IIncidentListener
Gaudi::Property< std::string > m_outputFileName
Definition ClassIDSvc.h:121
virtual CLID nextAvailableID() const override
get next available CLID
void dump() const
dump to MsgStream contents of in memory DB
StatusCode uncheckedSetTypePackageForID(const CLID &id, const std::string &typeName, const std::string &typeInfoName)
associate type name with clID w/o checking CLID range
virtual StatusCode getIDOfTypeInfoName(const std::string &typeInfoName, CLID &id) const override
get id associated with type-info name (if any)
bool getRegistryEntries(const std::string &moduleName)
load clid/names from a DLL registry
std::vector< CLID > sortedIDs() const
Return all registered IDs in sorted order.
virtual bool isNameInUse(const std::string &name) const override
check if id is used
virtual StatusCode finalize() override
dump CLIDmap to outputFileName;
std::pair< std::string, std::string > TypeName
Definition ClassIDSvc.h:39
virtual StatusCode getTypeNameOfID(const CLID &id, std::string &typeName) const override
get type name associated with clID (if any)
virtual StatusCode getTypeInfoNameOfID(const CLID &id, std::string &typeInfoName) const override
get user assigned type-info name associated with clID
virtual bool isIDInUse(const CLID &id) const override
check if id is used
DirSearchPath m_clidDBPath
The path is which clid db files are to be searched (DATAPATH)
Definition ClassIDSvc.h:129
bool maybeRescan() const
Test to see if anything new has been added to the registry.
virtual StatusCode getIDOfTypeName(const std::string &typeName, CLID &id) const override
get id associated with type name (if any)
std::lock_guard< mutex_t > lock_t
Definition ClassIDSvc.h:133
ClassIDSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
std::unordered_map< CLID, TypeName > CLIDMap
Definition ClassIDSvc.h:40
mutex_t m_mutex
Definition ClassIDSvc.h:134
NameMap m_nameMap
Definition ClassIDSvc.h:125
std::unordered_map< std::string, CLID > NameMap
Definition ClassIDSvc.h:41
std::mutex mutex_t
Definition ClassIDSvc.h:132
virtual StatusCode setTypeForID(const CLID &id, const std::string &typeName, const std::string &typeInfoName="") override
associate type name, package info and type-info name with clID