5#ifndef CLIDCOMPS_CLASSIDSVC_H
6# define CLIDCOMPS_CLASSIDSVC_H
13#include <unordered_map>
19#include "GaudiKernel/IIncidentListener.h"
20#include "GaudiKernel/IClassIDSvc.h"
21#include "GaudiKernel/Service.h"
22#include "GaudiKernel/DirSearchPath.h"
36class ClassIDSvc :
public extends<Service, IClassIDSvc, IIncidentListener>
39 typedef std::pair<std::string, std::string>
TypeName;
40 typedef std::unordered_map<CLID, TypeName>
CLIDMap;
41 typedef std::unordered_map<std::string, CLID>
NameMap;
57 virtual bool isNameInUse(
const std::string& name)
const override;
68 const std::string& typeName,
69 const std::string& typeInfoName =
"")
override;
86 virtual StatusCode
finalize()
override;
90 void handle(
const Incident &inc)
override;
93 ClassIDSvc(
const std::string& name, ISvcLocator* svc);
109 const std::string& typeName,
110 const std::string& typeInfoName);
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>"};
122 "Path to clid.db file for writing. By default ('NULL') to not create the file."};
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
Gaudi::Property< std::vector< std::string > > m_DBFiles
bool processCLIDDB(const std::string &fileName)
load clid/names from a "db" file
virtual StatusCode reinitialize() override
void handle(const Incident &inc) override
implement IIncidentListener
Gaudi::Property< std::string > m_outputFileName
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
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)
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
ClassIDSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
std::unordered_map< CLID, TypeName > CLIDMap
std::unordered_map< std::string, CLID > NameMap
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