|
ATLAS Offline Software
|
#include <AthDictLoaderSvc.h>
|
using | Memo_t = std::unordered_set< std::string > |
|
Definition at line 34 of file AthDictLoaderSvc.h.
◆ Memo_t
◆ AthDictLoaderSvc() [1/2]
AthDictLoaderSvc::AthDictLoaderSvc |
( |
const std::string & |
name, |
|
|
ISvcLocator * |
pSvcLocator |
|
) |
| |
◆ ~AthDictLoaderSvc()
AthDictLoaderSvc::~AthDictLoaderSvc |
( |
| ) |
|
|
virtual |
◆ AthDictLoaderSvc() [2/2]
AthDictLoaderSvc::AthDictLoaderSvc |
( |
| ) |
|
|
private |
◆ finalize()
StatusCode AthDictLoaderSvc::finalize |
( |
| ) |
|
|
overridevirtual |
◆ has_type() [1/3]
bool AthDictLoaderSvc::has_type |
( |
CLID |
clid | ) |
|
|
overridevirtual |
◆ has_type() [2/3]
bool AthDictLoaderSvc::has_type |
( |
const std::string & |
type_name | ) |
|
|
overridevirtual |
◆ has_type() [3/3]
bool AthDictLoaderSvc::has_type |
( |
const std::type_info & |
typeinfo | ) |
|
|
overridevirtual |
◆ initialize()
StatusCode AthDictLoaderSvc::initialize |
( |
| ) |
|
|
overridevirtual |
◆ load_recursive()
◆ load_recursive1() [1/2]
Definition at line 222 of file AthDictLoaderSvc.cxx.
227 std::string nam = typ.
Name();
228 if (!memo.insert (nam).second)
return;
229 if (nam ==
"string" || nam ==
"std::string" ||
230 startsWith (nam,
"basic_string<") ||
231 startsWith (nam,
"std::basic_string<"))
235 if (startsWith (nam,
"vector<") || startsWith (nam,
"std::vector<")) {
236 std::string eltclass;
241 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
242 TClassEdit::TSplitType
split (nam.c_str());
243 if (
split.fElements.size() > 1) {
244 eltclass =
split.fElements[1];
247 if (!eltclass.empty()) {
253 else if (startsWith (nam,
"DataVector<")) {
254 std::string eltclass;
259 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
260 TClassEdit::TSplitType
split (nam.c_str());
261 if (
split.fElements.size() > 1) {
262 eltclass =
split.fElements[1];
265 if (!eltclass.empty()) {
270 else if (startsWith (nam,
"pair<") || startsWith (nam,
"std::pair<")) {
271 std::string pclass1, pclass2;
276 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
277 TClassEdit::TSplitType
split (nam.c_str());
278 if (
split.fElements.size() > 2) {
279 pclass1 =
split.fElements[1];
280 pclass2 =
split.fElements[2];
283 if (!pclass1.empty()) {
289 else if (startsWith (nam,
"map<") || startsWith (nam,
"std::map<")) {
290 std::string pclass1, pclass2;
295 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
296 TClassEdit::TSplitType
split (nam.c_str());
297 if (
split.fElements.size() > 2) {
298 pclass1 =
split.fElements[1];
299 pclass2 =
split.fElements[2];
302 if (!pclass1.empty()) {
306 std::string pname =
"std::pair<" + pclass1 +
"," + pclass2 +
">";
311 else if (startsWith (nam,
"LArConditionsContainer<")) {
317 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
318 TClassEdit::TSplitType
split (nam.c_str());
319 if (
split.fElements.size() > 1) {
320 pname =
"LArConditionsSubset<" +
split.fElements[1] +
">";
323 if (!pname.empty()) {
326 std::unique_ptr<ITPCnvBase> tpcnv =
m_tpCnvSvc->t2p_cnv_unique (pname);
335 for (
size_t i = 0;
i < nbase;
i++) {
340 for (
size_t i = 0;
i < nmem;
i++) {
◆ load_recursive1() [2/2]
void AthDictLoaderSvc::load_recursive1 |
( |
const std::string & |
tnam, |
|
|
Memo_t & |
memo |
|
) |
| |
|
private |
◆ load_type() [1/3]
retrieve a Reflex::Type
by name (auto)loading the dictionary by any necessary means.
If recursive
is true, then recursively load contained types.
Definition at line 166 of file AthDictLoaderSvc.cxx.
168 std::string
name =
"<N/A>";
170 ATH_MSG_INFO (
"could not retrieve typename for clid [" << clid <<
"]");
◆ load_type() [2/3]
const RootType AthDictLoaderSvc::load_type |
( |
const std::string & |
type_name, |
|
|
bool |
recursive = false |
|
) |
| |
|
overridevirtual |
retrieve a Reflex::Type
by name (auto)loading the dictionary by any necessary means.
If recursive
is true, then recursively load contained types.
Definition at line 130 of file AthDictLoaderSvc.cxx.
◆ load_type() [3/3]
const RootType AthDictLoaderSvc::load_type |
( |
const std::type_info & |
typeinfo, |
|
|
bool |
recursive = false |
|
) |
| |
|
overridevirtual |
retrieve a Reflex::Type
by std::type_info
(auto)loading the dictionary by any necessary means.
This method is preferred over the above one as it is guaranteed to succeed IF the dictionary for that type has been generated. If recursive
is true, then recursively load contained types.
Definition at line 153 of file AthDictLoaderSvc.cxx.
157 (
"loading [" << System::typeinfoName(typeinfo) <<
" (from typeinfo)]...");
◆ m_clidSvc
handle to a IClassIDSvc
to handle loading of types by CLID
Definition at line 112 of file AthDictLoaderSvc.h.
◆ m_dsodb
◆ m_tpCnvSvc
The documentation for this class was generated from the following files:
size_t DataMemberSize() const
static TScopeAdapter ByNameNoQuiet(const std::string &name, Bool_t load=kTRUE)
ServiceHandle< ITPCnvSvc > m_tpCnvSvc
std::unordered_set< std::string > Memo_t
static const DsoDb * instance()
factory for the DsoDb
bool has_type(const std::string &type_name) const
void load_recursive(const RootType &typ)
TTypeAdapter TypeOf() const
const Ath::DsoDb * m_dsodb
dictionary of all known (reflex) types
std::string Name(unsigned int mod=Reflex::SCOPED) const
static const BaseInfoBase * find(CLID clid)
Find the BaseInfoBase instance for clid.
Run a MT piece of code with an alternate root error handler.
ServiceHandle< IClassIDSvc > m_clidSvc
handle to a IClassIDSvc to handle loading of types by CLID
Bool_t IsFundamental() const
void load_recursive1(const std::string &tnam, Memo_t &memo)
virtual const std::type_info & persistentTInfo() const =0
return C++ type id of the persistent class this converter is for
The non-template portion of the BaseInfo implementation.
virtual const RootType load_type(const std::string &type_name, bool recursive=false) override
retrieve a Reflex::Type by name (auto)loading the dictionary by any necessary means.
TMemberAdapter DataMemberAt(size_t nth) const
const std::type_info & typeinfo() const
Return the std::type_info for this class.
virtual bool has_type(const std::string &type_name) override
check a Reflex dictionary exists for a given type
TBaseAdapter BaseAt(size_t nth) const