![Logo](../../ATLAS-Logo-Square-Blue-RGB.png) |
ATLAS Offline Software
|
Go to the documentation of this file.
18 #include "Gaudi/Property.h"
19 #include "GaudiKernel/System.h"
24 #include "TClassEdit.h"
29 bool startsWith (
const std::string&
a,
const std::string&
b)
31 return (
a.compare (0,
b.size(),
b) == 0);
39 ISvcLocator* pSvcLocator) :
42 m_clidSvc (
"ClassIDSvc",
name),
43 m_tpCnvSvc(
"AthTPCnvSvc",
name)
60 return StatusCode::FAILURE;
67 return StatusCode::SUCCESS;
73 return StatusCode::SUCCESS;
88 return ::AthService::queryInterface(riid, ppvInterface);
91 return StatusCode::SUCCESS;
104 ATH_MSG_DEBUG (
"no reflex dict. for type [" << type_name <<
"]");
115 return has_type (System::typeinfoName(typeinfo).c_str());
124 std::string
name =
"<N/A>";
133 if (
m_clidSvc->getTypeInfoNameOfID(clid,
name).isSuccess()) {
175 (
"loading [" << System::typeinfoName(typeinfo) <<
" (from typeinfo)]...");
186 std::string
name =
"<N/A>";
188 ATH_MSG_INFO (
"could not retrieve typename for clid [" << clid <<
"]");
232 if (startsWith (tnam,
"const ")) {
245 std::string nam = typ.
Name();
246 if (!memo.insert (nam).second)
return;
247 if (nam ==
"string" || nam ==
"std::string" ||
248 startsWith (nam,
"basic_string<") ||
249 startsWith (nam,
"std::basic_string<"))
253 if (startsWith (nam,
"vector<") || startsWith (nam,
"std::vector<")) {
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()) {
271 else if (startsWith (nam,
"DataVector<")) {
272 std::string eltclass;
277 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
278 TClassEdit::TSplitType
split (nam.c_str());
279 if (
split.fElements.size() > 1) {
280 eltclass =
split.fElements[1];
283 if (!eltclass.empty()) {
288 else if (startsWith (nam,
"pair<") || startsWith (nam,
"std::pair<")) {
289 std::string pclass1, pclass2;
294 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
295 TClassEdit::TSplitType
split (nam.c_str());
296 if (
split.fElements.size() > 2) {
297 pclass1 =
split.fElements[1];
298 pclass2 =
split.fElements[2];
301 if (!pclass1.empty()) {
307 else if (startsWith (nam,
"map<") || startsWith (nam,
"std::map<")) {
308 std::string pclass1, pclass2;
313 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
314 TClassEdit::TSplitType
split (nam.c_str());
315 if (
split.fElements.size() > 2) {
316 pclass1 =
split.fElements[1];
317 pclass2 =
split.fElements[2];
320 if (!pclass1.empty()) {
324 std::string pname =
"std::pair<" + pclass1 +
"," + pclass2 +
">";
329 else if (startsWith (nam,
"LArConditionsContainer<")) {
335 R__WRITE_LOCKGUARD(ROOT::gCoreMutex);
336 TClassEdit::TSplitType
split (nam.c_str());
337 if (
split.fElements.size() > 1) {
338 pname =
"LArConditionsSubset<" +
split.fElements[1] +
">";
341 if (!pname.empty()) {
344 std::unique_ptr<ITPCnvBase> tpcnv =
m_tpCnvSvc->t2p_cnv_unique (pname);
353 for (
size_t i = 0;
i < nbase;
i++) {
358 for (
size_t i = 0;
i < nmem;
i++) {
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
virtual ~AthDictLoaderSvc()
Destructor:
bool has_type(const std::string &type_name) const
void load_recursive(const RootType &typ)
TTypeAdapter TypeOf() const
Provide an interface for finding inheritance information at run time.
virtual StatusCode queryInterface(const InterfaceID &riid, void **ppvInterface) override
::StatusCode StatusCode
StatusCode definition for legacy code.
AthDictLoaderSvc()
Default constructor:
uint32_t CLID
The Class ID type.
const Ath::DsoDb * m_dsodb
dictionary of all known (reflex) types
std::string Name(unsigned int mod=Reflex::SCOPED) const
static const InterfaceID & interfaceID()
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
Run a MT piece of code with an alternate root error handler.
virtual StatusCode finalize() override
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
virtual StatusCode initialize() override
Gaudi Service Implementation.
TBaseAdapter BaseAt(size_t nth) const