ATLAS Offline Software
Loading...
Searching...
No Matches
SG::BaseInfoBaseImpl Struct Reference
Collaboration diagram for SG::BaseInfoBaseImpl:

Classes

struct  Deleter
struct  info
 Structure to hold information about one base. More...

Public Types

typedef std::pair< const std::type_info *, infoti_map_pair_type
 Hold base information indexed by type_info.
typedef std::vector< ti_map_pair_typeti_map_type
typedef std::pair< const std::type_info *, const CopyConversionBase * > ti_copyconversion_pair_type
 Hold copy conversion information indexed by @ type_info.
typedef std::vector< ti_copyconversion_pair_typeti_copyconversion_type
typedef std::unordered_map< const std::type_info *, BaseInfoBase * > bi_by_ti_map_type
 Map of all type_info pointers to BaseInfoBase instances.
typedef std::unordered_map< std::string, const std::type_info * > ti_by_name_map_type
 Used to canonicalize type_info instances.
typedef std::unordered_multimap< const std::type_info *, BaseInfoBase::init_func_t * > init_list_t
 Holds BaseInfo classes awaiting initialization.
typedef std::mutex mutex_t
 For thread-safety.
typedef std::lock_guard< mutex_tlock_t

Public Member Functions

const infofindInfo (const std::type_info &tinfo) const
 Find a base by type_info.

Public Attributes

CLID m_clid
 CLID of this class.
bool m_needs_init
 Set to true when first created.
const std::type_info * m_typeinfo
 std::type_info of this class.
ti_map_type m_timap
ti_copyconversion_type m_ti_copyconversion_map
mutex_t m_mutex
CxxUtils::CachedValue< std::vector< CLID > > m_bases
 CLIDs of known bases, including the class itself.

Static Public Attributes

static bi_by_ti_map_type *s_bi_by_ti ATLAS_THREAD_SAFE
static ti_by_name_map_type *s_ti_by_name ATLAS_THREAD_SAFE
static init_list_t *s_init_list ATLAS_THREAD_SAFE
static Deleter s_deleter
static mutex_t s_mutex ATLAS_THREAD_SAFE

Detailed Description

Definition at line 29 of file BaseInfo.cxx.

Member Typedef Documentation

◆ bi_by_ti_map_type

typedef std::unordered_map<const std::type_info*, BaseInfoBase*> SG::BaseInfoBaseImpl::bi_by_ti_map_type

Map of all type_info pointers to BaseInfoBase instances.

Definition at line 77 of file BaseInfo.cxx.

◆ init_list_t

typedef std::unordered_multimap<const std::type_info*, BaseInfoBase::init_func_t*> SG::BaseInfoBaseImpl::init_list_t

Holds BaseInfo classes awaiting initialization.

This is used to defer initialization until everything's loaded.

Definition at line 89 of file BaseInfo.cxx.

◆ lock_t

typedef std::lock_guard<mutex_t> SG::BaseInfoBaseImpl::lock_t

Definition at line 101 of file BaseInfo.cxx.

◆ mutex_t

typedef std::mutex SG::BaseInfoBaseImpl::mutex_t

For thread-safety.

Definition at line 100 of file BaseInfo.cxx.

◆ ti_by_name_map_type

typedef std::unordered_map<std::string, const std::type_info*> SG::BaseInfoBaseImpl::ti_by_name_map_type

Used to canonicalize type_info instances.

Definition at line 82 of file BaseInfo.cxx.

◆ ti_copyconversion_pair_type

typedef std::pair<const std::type_info*, const CopyConversionBase*> SG::BaseInfoBaseImpl::ti_copyconversion_pair_type

Hold copy conversion information indexed by @ type_info.

Definition at line 71 of file BaseInfo.cxx.

◆ ti_copyconversion_type

◆ ti_map_pair_type

typedef std::pair<const std::type_info*, info> SG::BaseInfoBaseImpl::ti_map_pair_type

Hold base information indexed by type_info.

Definition at line 64 of file BaseInfo.cxx.

◆ ti_map_type

Definition at line 65 of file BaseInfo.cxx.

Member Function Documentation

◆ findInfo()

const info * SG::BaseInfoBaseImpl::findInfo ( const std::type_info & tinfo) const
inline

Find a base by type_info.

Parameters
tinfoThe type_info to find.

Returns the info pointer for the base corresponding to info, or nullptr if there is no match.

Definition at line 118 of file BaseInfo.cxx.

119 {
120 // We don't expect there to be many entries, so just use a linear search.
121 for (const auto& i : m_timap) {
122 if (i.first == &tinfo)
123 return &i.second;
124 }
125
126 // Sometimes type_info's are not actually unique, depending on how libraries
127 // get loaded. Try again, comparing names.
128 for (const auto& i : m_timap) {
129 if (strcmp (i.first->name(), tinfo.name()) == 0)
130 return &i.second;
131 }
132 return nullptr;
133 }
ti_map_type m_timap
Definition BaseInfo.cxx:66

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/4]

bi_by_ti_map_type* s_bi_by_ti SG::BaseInfoBaseImpl::ATLAS_THREAD_SAFE
static

Definition at line 78 of file BaseInfo.cxx.

◆ ATLAS_THREAD_SAFE [2/4]

ti_by_name_map_type* s_ti_by_name SG::BaseInfoBaseImpl::ATLAS_THREAD_SAFE
static

Definition at line 83 of file BaseInfo.cxx.

◆ ATLAS_THREAD_SAFE [3/4]

init_list_t* s_init_list SG::BaseInfoBaseImpl::ATLAS_THREAD_SAFE
static

Definition at line 90 of file BaseInfo.cxx.

◆ ATLAS_THREAD_SAFE [4/4]

mutex_t s_mutex SG::BaseInfoBaseImpl::ATLAS_THREAD_SAFE
static

Definition at line 102 of file BaseInfo.cxx.

◆ m_bases

CxxUtils::CachedValue<std::vector<CLID> > SG::BaseInfoBaseImpl::m_bases

CLIDs of known bases, including the class itself.

This can be read without acquiring the mutex.

Definition at line 108 of file BaseInfo.cxx.

◆ m_clid

CLID SG::BaseInfoBaseImpl::m_clid

CLID of this class.

Definition at line 53 of file BaseInfo.cxx.

◆ m_mutex

mutex_t SG::BaseInfoBaseImpl::m_mutex
mutable

Definition at line 103 of file BaseInfo.cxx.

◆ m_needs_init

bool SG::BaseInfoBaseImpl::m_needs_init

Set to true when first created.

Reset after we scan for init functions.

Definition at line 57 of file BaseInfo.cxx.

◆ m_ti_copyconversion_map

ti_copyconversion_type SG::BaseInfoBaseImpl::m_ti_copyconversion_map

Definition at line 73 of file BaseInfo.cxx.

◆ m_timap

ti_map_type SG::BaseInfoBaseImpl::m_timap

Definition at line 66 of file BaseInfo.cxx.

◆ m_typeinfo

const std::type_info* SG::BaseInfoBaseImpl::m_typeinfo

std::type_info of this class.

Definition at line 60 of file BaseInfo.cxx.

◆ s_deleter

BaseInfoBaseImpl::Deleter SG::BaseInfoBaseImpl::s_deleter
static

Definition at line 97 of file BaseInfo.cxx.


The documentation for this struct was generated from the following file: