ATLAS Offline Software
Loading...
Searching...
No Matches
ClassIDSvc Class Reference

a service to manage and verify CLID assignments in athena. More...

#include <ClassIDSvc.h>

Inheritance diagram for ClassIDSvc:
Collaboration diagram for ClassIDSvc:

Public Member Functions

IClassIDSvc interfaces.
virtual CLID nextAvailableID () const override
 get next available CLID
virtual bool isIDInUse (const CLID &id) const override
 check if id is used
virtual bool isNameInUse (const std::string &name) const override
 check if id is used
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 StatusCode getIDOfTypeName (const std::string &typeName, CLID &id) const override
 get id associated with type name (if any)
virtual StatusCode getIDOfTypeInfoName (const std::string &typeInfoName, CLID &id) const override
 get id associated with type-info name (if any)
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
Debugging methods.
void dump () const
 dump to MsgStream contents of in memory DB

Private Types

typedef std::pair< std::string, std::string > TypeName
typedef std::unordered_map< CLID, TypeName > CLIDMap
typedef std::unordered_map< std::string, CLID > NameMap

Properties

typedef std::mutex mutex_t
typedef std::lock_guard< mutex_t > lock_t
Gaudi::Property< std::vector< std::string > > m_DBFiles
Gaudi::Property< std::string > m_outputFileName
Gaudi::Property< std::set< CLID > > m_clidIgnore
CLIDMap m_clidMap
NameMap m_nameMap
NameMap m_tiNameMap
DirSearchPath m_clidDBPath
 The path is which clid db files are to be searched (DATAPATH).
mutex_t m_mutex

Gaudi methods.

virtual StatusCode initialize () override
 Gaudi Service Implementation.
virtual StatusCode reinitialize () override
virtual StatusCode finalize () override
 dump CLIDmap to outputFileName;
void handle (const Incident &inc) override
 implement IIncidentListener
 ClassIDSvc (const std::string &name, ISvcLocator *svc)
 Standard Constructor.
std::vector< CLID > sortedIDs () const
 Return all registered IDs in sorted order.
StatusCode fillDB ()
 get clids from CLIDDB and from registry entries
bool processCLIDDB (const std::string &fileName)
 load clid/names from a "db" file
bool getRegistryEntries (const std::string &moduleName)
 load clid/names from a DLL registry
StatusCode uncheckedSetTypePackageForID (const CLID &id, const std::string &typeName, const std::string &typeInfoName)
 associate type name with clID w/o checking CLID range
bool maybeRescan () const
 Test to see if anything new has been added to the registry.

Detailed Description

a service to manage and verify CLID assignments in athena.

(clid, class_name) entries are loaded at init from the list of files specifies in "CLIDDBFiles", and from the CLID_Registry of every library. Optionally the resulting m_clidMap can be dumped to "OutputFileName" at finalize time.

Definition at line 37 of file ClassIDSvc.h.

Member Typedef Documentation

◆ CLIDMap

typedef std::unordered_map<CLID, TypeName> ClassIDSvc::CLIDMap
private

Definition at line 41 of file ClassIDSvc.h.

◆ lock_t

typedef std::lock_guard<mutex_t> ClassIDSvc::lock_t
private

Definition at line 138 of file ClassIDSvc.h.

◆ mutex_t

typedef std::mutex ClassIDSvc::mutex_t
private

Definition at line 137 of file ClassIDSvc.h.

◆ NameMap

typedef std::unordered_map<std::string, CLID> ClassIDSvc::NameMap
private

Definition at line 42 of file ClassIDSvc.h.

◆ TypeName

typedef std::pair<std::string, std::string> ClassIDSvc::TypeName
private

Definition at line 40 of file ClassIDSvc.h.

Constructor & Destructor Documentation

◆ ClassIDSvc()

ClassIDSvc::ClassIDSvc ( const std::string & name,
ISvcLocator * svc )

Standard Constructor.

Definition at line 285 of file ClassIDSvc.cxx.

286 : base_class(name,svc),
287 m_clidDBPath(System::getEnv("DATAPATH"))
288{
289}
DirSearchPath m_clidDBPath
The path is which clid db files are to be searched (DATAPATH).
Definition ClassIDSvc.h:134

Member Function Documentation

◆ dump()

void ClassIDSvc::dump ( ) const

dump to MsgStream contents of in memory DB

Definition at line 200 of file ClassIDSvc.cxx.

201{
203 ATH_MSG_INFO( "dump: in memory" );
204
205 for (CLID clid : sortedIDs()) {
206 auto it = m_clidMap.find (clid);
207 if (it == m_clidMap.end()) {
208 ATH_MSG_INFO( "CLID: {} - type name: NOT FOUND", clid );
209 }
210 else {
211 ATH_MSG_INFO( "CLID: {} - type name: ", clid, it->second.first );
212 }
213 }
214 ATH_MSG_INFO( "------------------------------" );
215}
#define ATH_MSG_INFO(x,...)
uint32_t CLID
The Class ID type.
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
CLIDMap m_clidMap
Definition ClassIDSvc.h:129
std::vector< CLID > sortedIDs() const
Return all registered IDs in sorted order.
std::lock_guard< mutex_t > lock_t
Definition ClassIDSvc.h:138
mutex_t m_mutex
Definition ClassIDSvc.h:139

◆ fillDB()

StatusCode ClassIDSvc::fillDB ( )
private

get clids from CLIDDB and from registry entries

Process the various clid dbs according to user's request.

Definition at line 307 of file ClassIDSvc.cxx.

307 {
308 bool allOK(true);
309 for (const std::string& DBFile : m_DBFiles) {
310 DirSearchPath::path clidDB(DBFile);
311
312 if (clidDB.is_absolute()) {
313 allOK = processCLIDDB(clidDB.string());
314 } else {
315 std::list<DirSearchPath::path> paths(m_clidDBPath.find_all(clidDB));
316 if (paths.empty()) {
317 ATH_MSG_DEBUG( "Could not resolve clid DB path " << clidDB
318 << " using DATAPATH. Skipping it." );
319 } else {
320 for (const auto& p : paths) {
321 allOK &= processCLIDDB(p.string());
322 }
323 }
324 }
325 }
326 return StatusCode(allOK);
327}
#define ATH_MSG_DEBUG(x,...)
Gaudi::Property< std::vector< std::string > > m_DBFiles
Definition ClassIDSvc.h:118
bool processCLIDDB(const std::string &fileName)
load clid/names from a "db" file
::StatusCode StatusCode
StatusCode definition for legacy code.
list paths
Definition grepfile.py:35

◆ finalize()

StatusCode ClassIDSvc::finalize ( )
overridevirtual

dump CLIDmap to outputFileName;

Definition at line 254 of file ClassIDSvc.cxx.

255{
256 if (m_outputFileName != "NULL") {
257 std::ofstream outfile( m_outputFileName );
258 if ( !outfile ) {
259 ATH_MSG_ERROR( "unable to open output CLIDDB file: {}", m_outputFileName.value() );
260 return StatusCode::RECOVERABLE;
261 } else {
262 for (CLID clid : sortedIDs()) {
263 const std::string& typeName = m_clidMap[clid].first;
264 const std::string& tiName = m_clidMap[clid].second;
265 std::println (outfile, "{}; {}; {}", clid, typeName, tiName);
266 }
267 ATH_MSG_INFO( "finalize: wrote {} entries to output CLIDDB file: {}",
268 m_clidMap.size(), m_outputFileName.value() );
269 }
270 }
271 return Service::finalize();
272}
#define ATH_MSG_ERROR(x,...)
Gaudi::Property< std::string > m_outputFileName
Definition ClassIDSvc.h:122

◆ getIDOfTypeInfoName()

StatusCode ClassIDSvc::getIDOfTypeInfoName ( const std::string & typeInfoName,
CLID & id ) const
overridevirtual

get id associated with type-info name (if any)

Definition at line 165 of file ClassIDSvc.cxx.

167{
169 maybeRescan();
170 NameMap::const_iterator iID = m_tiNameMap.find(typeInfoName);
171 if (iID != m_tiNameMap.end()) {
172 id = iID->second;
173 ATH_CONST_MSG_VERBOSE( "getIDOfTypeInfoName({}) CLID is {}", typeInfoName, id );
174 return StatusCode::SUCCESS;
175 }
176 else {
177 ATH_CONST_MSG_VERBOSE( "getIDOfTypeInfoName({}) no associated CLID found", typeInfoName );
178 return StatusCode::FAILURE;
179 }
180}
#define ATH_CONST_MSG_VERBOSE(x,...)
NameMap m_tiNameMap
Definition ClassIDSvc.h:131
bool maybeRescan() const
Test to see if anything new has been added to the registry.

◆ getIDOfTypeName()

StatusCode ClassIDSvc::getIDOfTypeName ( const std::string & typeName,
CLID & id ) const
overridevirtual

get id associated with type name (if any)

Definition at line 141 of file ClassIDSvc.cxx.

142{
144 maybeRescan();
145
146 NameMap::const_iterator iID = m_nameMap.find(typeName);
147 if (iID != m_nameMap.end()) {
148 id = iID->second;
149 ATH_CONST_MSG_VERBOSE( "getIDOfTypeName({}) CLID is {}", typeName, id );
150 return StatusCode::SUCCESS;
151 }
152 else if (tryNumeric (typeName, id)) {
153 ATH_CONST_MSG_VERBOSE( "getIDOfTypeName({}) is a numeric CLID", typeName );
154 return StatusCode::SUCCESS;
155 }
156 else {
157 ATH_CONST_MSG_VERBOSE( "getIDOfTypeName({}) no associated CLID found", typeName );
158 return StatusCode::FAILURE;
159 }
160}
NameMap m_nameMap
Definition ClassIDSvc.h:130

◆ getRegistryEntries()

bool ClassIDSvc::getRegistryEntries ( const std::string & moduleName)
private

load clid/names from a DLL registry

Definition at line 375 of file ClassIDSvc.cxx.

376{
377 //not only this is fast, but is necessary to prevent recursion
378 if (!CLIDRegistry::hasNewEntries()) return true;
379
380 bool allOK(true);
381 size_t newEntries(0);
382 //to speed up processing we only take entries added to CLIDRegistry
383 //since last call (thanks Niels!)
384 for (const auto& [clid, typeName, typeInfoName] : CLIDRegistry::newEntries()) {
385 ATH_MSG_VERBOSE( "reading [{}, {}, {}]", clid, typeName, typeInfoName);
386 if (uncheckedSetTypePackageForID(clid, typeName, typeInfoName)) {
387 ++newEntries;
388 }
389 else {
390 allOK = false;
391 }
392 }
393
394 if (allOK) {
395 ATH_MSG_INFO( "getRegistryEntries: read {} CLIDRegistry entries for module {}",
396 newEntries, moduleName );
397 } else {
398 ATH_MSG_ERROR("getRegistryEntries: can not read CLIDRegistry entries for module {}",
399 moduleName );
400 }
401
402 return allOK;
403}
#define ATH_MSG_VERBOSE(x,...)
static bool hasNewEntries()
registry accessors (used by ClassIDSvc)
static CLIDVector_t newEntries()
returns an iterator range over the entries added since last time newEntries was called
StatusCode uncheckedSetTypePackageForID(const CLID &id, const std::string &typeName, const std::string &typeInfoName)
associate type name with clID w/o checking CLID range

◆ getTypeInfoNameOfID()

StatusCode ClassIDSvc::getTypeInfoNameOfID ( const CLID & id,
std::string & typeInfoName ) const
overridevirtual

get user assigned type-info name associated with clID

get type name associated with clID (if any)

Definition at line 120 of file ClassIDSvc.cxx.

121{
123 maybeRescan();
124
125 CLIDMap::const_iterator iID = m_clidMap.find(id);
126 if (iID != m_clidMap.end()) {
127 typeInfoName = iID->second.second;
128 ATH_CONST_MSG_VERBOSE( "getTypeInfoNameOfID({}) type-info name is {}",
129 id, typeInfoName );
130 return StatusCode::SUCCESS;
131 }
132 else {
133 ATH_CONST_MSG_VERBOSE( "getTypeInfoNameOfID({}) no associated type-info name found", id );
134 return StatusCode::FAILURE;
135 }
136}

◆ getTypeNameOfID()

StatusCode ClassIDSvc::getTypeNameOfID ( const CLID & id,
std::string & typeName ) const
overridevirtual

get type name associated with clID (if any)

Definition at line 100 of file ClassIDSvc.cxx.

101{
103 maybeRescan();
104
105 CLIDMap::const_iterator iID = m_clidMap.find(id);
106 if (iID != m_clidMap.end()) {
107 typeName = iID->second.first;
108 ATH_CONST_MSG_VERBOSE( "getTypeNameOfID({}) type name is {}", id, typeName );
109 return StatusCode::SUCCESS;
110 }
111 else {
112 ATH_CONST_MSG_VERBOSE( "getTypeNameOfID({}) no associated type name found", id );
113 return StatusCode::FAILURE;
114 }
115}

◆ handle()

void ClassIDSvc::handle ( const Incident & inc)
override

implement IIncidentListener

Definition at line 275 of file ClassIDSvc.cxx.

276{
278 const ModuleLoadedIncident& modInc(dynamic_cast<const ModuleLoadedIncident&>(inc));
279
280 getRegistryEntries(modInc.module());
281}
bool getRegistryEntries(const std::string &moduleName)
load clid/names from a DLL registry

◆ initialize()

StatusCode ClassIDSvc::initialize ( )
overridevirtual

Gaudi Service Implementation.

Definition at line 219 of file ClassIDSvc.cxx.

220{
221 using namespace std::string_view_literals;
222
223 ATH_MSG_VERBOSE( "Initializing {}", name() ) ;
224
225 CHECK( Service::initialize() );
226
227 // ignore CLIDs (for testing/debugging):
228 if (const char* clid_ignore = std::getenv("ATLAS_CLID_IGNORE")) {
229 m_clidIgnore.value().insert_range( CxxUtils::tokenizeInt(clid_ignore, ","sv) );
230 }
231
232 // set up the incident service:
233 ServiceHandle<IIncidentSvc> pIncSvc ("IncidentSvc", name());
234 CHECK( pIncSvc.retrieve() );
235
236 pIncSvc->addListener(this, ModuleLoadedIncident::TYPE(), /*priority*/ 100);
237 pIncSvc->release();
238
239 CHECK( maybeRescan() ); // calls fillDB() if not already done
240
241 return StatusCode::SUCCESS;
242}
#define CHECK(...)
Evaluate an expression and check for errors.
Gaudi::Property< std::set< CLID > > m_clidIgnore
Definition ClassIDSvc.h:125
std::vector< int > tokenizeInt(std::string_view str, std::string_view delimiter)

◆ isIDInUse()

bool ClassIDSvc::isIDInUse ( const CLID & id) const
overridevirtual

check if id is used

Definition at line 83 of file ClassIDSvc.cxx.

83 {
86 return m_clidMap.find(id) != m_clidMap.end();
87}

◆ isNameInUse()

bool ClassIDSvc::isNameInUse ( const std::string & name) const
overridevirtual

check if id is used

Definition at line 91 of file ClassIDSvc.cxx.

91 {
94 return m_nameMap.find(name) != m_nameMap.end();
95}

◆ maybeRescan()

bool ClassIDSvc::maybeRescan ( ) const
private

Test to see if anything new has been added to the registry.

Definition at line 466 of file ClassIDSvc.cxx.

467{
468 // thread-safe because calls are protected by mutex or during initialize
469 ClassIDSvc* nc ATLAS_THREAD_SAFE = const_cast<ClassIDSvc*>(this);
470
471 // read CLID database in case initialize() was not called yet (ATR-23634)
472 [[maybe_unused]] static bool fillDB ATLAS_THREAD_SAFE = nc->fillDB().isSuccess();
473
474 // make sure registry is up-to-date
475 bool status = nc->getRegistryEntries ("ALL");
476
477 return status && fillDB;
478}
#define ATLAS_THREAD_SAFE
StatusCode fillDB()
get clids from CLIDDB and from registry entries
ClassIDSvc(const std::string &name, ISvcLocator *svc)
Standard Constructor.
status
Definition merge.py:16

◆ nextAvailableID()

CLID ClassIDSvc::nextAvailableID ( ) const
overridevirtual

get next available CLID

Exceptions
std::runtime_errorif no CLID can be allocated virtual CLID nextAvailableID() const;
std::runtime_errorif no CLID can be allocated

Definition at line 64 of file ClassIDSvc.cxx.

64 {
68 while (valid <= CLIDdetail::MAXCLID &&
69 m_clidMap.find(valid) != m_clidMap.end())
70 {
71 ++valid;
72 }
73
74 if (valid > CLIDdetail::MAXCLID) {
75 throw std::runtime_error("ClassIDSvc::nextAvailableID: none in range");
76 }
77
78 return valid;
79}
const unsigned long MINCLID
const unsigned long MAXCLID
2**31 - 1
list valid
Definition calibdata.py:44

◆ processCLIDDB()

bool ClassIDSvc::processCLIDDB ( const std::string & fileName)
private

load clid/names from a "db" file

Definition at line 331 of file ClassIDSvc.cxx.

332{
333 std::ifstream ifile(fileName);
334 if (!ifile) {
335 ATH_MSG_WARNING( "processCLIDDB: unable to open {}", fileName );
336 return true;
337 }
338
339 bool allOK(true);
340 unsigned int newEntries(0);
341 std::string line;
342 // Format: CLID;typeName[;typeInfoName]
343 while (allOK && std::getline(ifile, line)) {
344 std::vector<std::string> columns = CxxUtils::tokenize(line, ';');
345 long id(-1);
346 if (columns.size()>=2) {
347 columns[0] = CxxUtils::trimWhiteSpaces(columns[0]);
348 try {
349 id = std::stol(columns[0]);
350 } catch (const std::logic_error& e) {
351 ATH_MSG_ERROR( "processCLIDDB: Can't cast [{}] to long (clid): {}",
352 columns[0], e.what() );
353 allOK = false;
354 }
355
356 if (uncheckedSetTypePackageForID(id, columns[1],
357 columns.size()>2 ? columns[2] : "")) {
358 ++newEntries;
359 }
360 }
361 }
362
363 if (!allOK) {
364 ATH_MSG_ERROR( "processCLIDDB: processing record '{}' from CLIDDB file: {}",
365 line, fileName );
366 } else {
367 ATH_MSG_DEBUG( "processCLIDDB: read {} entries from CLIDDB file: {}",
368 newEntries, fileName );
369 }
370
371 return allOK;
372}
#define ATH_MSG_WARNING(x,...)
std::string_view trimWhiteSpaces(std::string_view str) noexcept
Removes all trailing and starting whitespaces from a string.
std::vector< std::string > tokenize(std::string_view the_str, std::string_view delimiters)
Splits the string into smaller substrings.

◆ reinitialize()

StatusCode ClassIDSvc::reinitialize ( )
overridevirtual

Definition at line 246 of file ClassIDSvc.cxx.

246 {
247 ATH_MSG_INFO( "RE-initializing {}", name() ) ;
248 CHECK( fillDB() );
249 return StatusCode::SUCCESS;
250}

◆ setTypeForID()

StatusCode ClassIDSvc::setTypeForID ( const CLID & id,
const std::string & typeName,
const std::string & typeInfoName = "" )
overridevirtual

associate type name, package info and type-info name with clID

associate type name with clID

Definition at line 185 of file ClassIDSvc.cxx.

188{
190 if (id < CLIDdetail::MINCLID || id > CLIDdetail::MAXCLID) {
191 ATH_MSG_ERROR( "setTypeNameForID: input id {} is out of allowed range {} : {}",
193 return StatusCode::FAILURE;
194 }
195 return uncheckedSetTypePackageForID(id, typeName, typeInfoName);
196}

◆ sortedIDs()

std::vector< CLID > ClassIDSvc::sortedIDs ( ) const
private

Return all registered IDs in sorted order.

Definition at line 293 of file ClassIDSvc.cxx.

294{
295 std::vector<CLID> ids;
296 ids.reserve (m_clidMap.size());
297 for (const auto& p : m_clidMap) {
298 ids.push_back (p.first);
299 }
300 std::sort (ids.begin(), ids.end());
301 return ids;
302}
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ uncheckedSetTypePackageForID()

StatusCode ClassIDSvc::uncheckedSetTypePackageForID ( const CLID & id,
const std::string & typeName,
const std::string & typeInfoName )
private

associate type name with clID w/o checking CLID range

Definition at line 407 of file ClassIDSvc.cxx.

410{
411 // process "raw" typeName
412 std::string procName(typeName);
413 procName = CxxUtils::trimWhiteSpaces(procName);
414
415 if (procName.empty()) {
416 ATH_MSG_ERROR( "Empty type name for CLID {}", id );
417 return StatusCode::FAILURE;
418 }
419
420 if (m_clidIgnore.value().contains(id)) {
421 ATH_MSG_WARNING( "Ignoring type '{}' with CLID {}", procName, id );
422 return StatusCode::SUCCESS;
423 }
424
425 // assign typeInfoName
426 std::string procTiName;
427 if (typeInfoName.empty()) {
428 procTiName = procName;
429 }
430 else {
431 procTiName = typeInfoName;
432 procTiName = CxxUtils::trimWhiteSpaces(procTiName);
433 }
434
435 // insert into CLID map
436 const auto& [clid_it, clid_success] = m_clidMap.try_emplace(id, procName, procTiName);
437 if (!clid_success && clid_it->second!=std::make_pair(procName,procTiName)) {
438 ATH_MSG_ERROR( "Cannot set type {} for CLID {}: known type for this ID {}",
439 std::make_pair(procName,procTiName), id, clid_it->second);
440 return StatusCode::FAILURE;
441 }
442
443 // insert into type name map
444 const auto& [name_it, name_success] = m_nameMap.try_emplace(procName, id);
445 if (!name_success && name_it->second!=id) {
446 ATH_MSG_ERROR( "Cannot set CLID {} for type name '{}': known CLID for this name {}",
447 id, procName, name_it->second);
448 return StatusCode::FAILURE;
449 }
450
451 // insert into typeInfo map
452 const auto& [info_it, info_success] = m_tiNameMap.try_emplace(procTiName, id);
453 if (!info_success && info_it->second!=id) {
454 ATH_MSG_ERROR( "Cannot set CLID {} for type-info name '{}' and type '{}': known CLID for this type-info name {}",
455 id, procTiName, procName, info_it->second);
456 return StatusCode::FAILURE;
457 }
458
459 ATH_MSG_VERBOSE( "Set type name '{}' for CLID {} with type-info name '{}'",
460 procName, id, procTiName);
461
462 return StatusCode::SUCCESS;
463}

Member Data Documentation

◆ m_clidDBPath

DirSearchPath ClassIDSvc::m_clidDBPath
private

The path is which clid db files are to be searched (DATAPATH).

Definition at line 134 of file ClassIDSvc.h.

◆ m_clidIgnore

Gaudi::Property<std::set<CLID> > ClassIDSvc::m_clidIgnore
private
Initial value:
{this, "IgnoreCLIDs", {},
"Set of CLIDs to ignore. Can also be set via the ATLAS_CLID_IGNORE environment variable (comma-separated). "
"Useful for testing the removal of EDM classes in a local build."}

Definition at line 125 of file ClassIDSvc.h.

125 {this, "IgnoreCLIDs", {},
126 "Set of CLIDs to ignore. Can also be set via the ATLAS_CLID_IGNORE environment variable (comma-separated). "
127 "Useful for testing the removal of EDM classes in a local build."};

◆ m_clidMap

CLIDMap ClassIDSvc::m_clidMap
private

Definition at line 129 of file ClassIDSvc.h.

◆ m_DBFiles

Gaudi::Property<std::vector<std::string> > ClassIDSvc::m_DBFiles
private
Initial value:
{this, "CLIDDBFiles", {"clid.db"},
"List of db files with (CLID, class_name) entries. Loaded at init in svc maps. Files are looked up in DATAPATH",
"OrderedSet<std::string>"}

Definition at line 118 of file ClassIDSvc.h.

118 {this, "CLIDDBFiles", {"clid.db"},
119 "List of db files with (CLID, class_name) entries. Loaded at init in svc maps. Files are looked up in DATAPATH",
120 "OrderedSet<std::string>"};

◆ m_mutex

mutex_t ClassIDSvc::m_mutex
mutableprivate

Definition at line 139 of file ClassIDSvc.h.

◆ m_nameMap

NameMap ClassIDSvc::m_nameMap
private

Definition at line 130 of file ClassIDSvc.h.

◆ m_outputFileName

Gaudi::Property<std::string> ClassIDSvc::m_outputFileName
private
Initial value:
{this, "OutputFileName", "NULL",
"Path to clid.db file for writing. By default ('NULL') to not create the file."}

Definition at line 122 of file ClassIDSvc.h.

122 {this, "OutputFileName", "NULL",
123 "Path to clid.db file for writing. By default ('NULL') to not create the file."};

◆ m_tiNameMap

NameMap ClassIDSvc::m_tiNameMap
private

Definition at line 131 of file ClassIDSvc.h.


The documentation for this class was generated from the following files: