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

#include <AthTPCnvSvc.h>

Inheritance diagram for AthTPCnvSvc:
Collaboration diagram for AthTPCnvSvc:

Public Member Functions

 AthTPCnvSvc (const std::string &name, ISvcLocator *pSvcLocator)
 Constructor with parameters:
virtual ~AthTPCnvSvc () override
 Destructor:
virtual ITPCnvBase * load_tpcnv (const std::string &cls) override
 load the T/P converter class named cls return NULL on failure.
virtual ITPCnvBase * t2p_cnv (const std::string &transClassName, Athena::TPCnvType::Value type=Athena::TPCnvType::Athena) override
 return the T/P converter for a transient class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer
virtual ITPCnvBase * t2p_cnv (const CLID &transClid, Athena::TPCnvType::Value type=Athena::TPCnvType::Athena) override
 return the T/P converter for a transient class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer
virtual ITPCnvBase * p2t_cnv (const std::string &persClassName, Athena::TPCnvType::Value type=Athena::TPCnvType::Athena) override
 return the T/P converter for a persistent class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer
virtual std::unique_ptr< ITPCnvBase > t2p_cnv_unique (const std::string &transClassName) const override
 return the T/P converter for a transient class (NULL if failure) Ownership is returned to the caller.
virtual std::unique_ptr< ITPCnvBase > t2p_cnv_unique (const CLID transClid) const override
 Return the T/P converter for a transient class.

Private Types

typedef std::vector< std::unique_ptr< ITPCnvBase > > TpCnvs_t

Private Member Functions

 AthTPCnvSvc ()
 Default constructor:

Private Attributes

ServiceHandle< IClassIDSvc > m_clidSvc
 handle to a IClassIDSvc to handle loading of types by CLID
TpCnvs_t m_cnvs
 a registry of ITPCnvBase* instances
std::mutex m_mutex

Detailed Description

Definition at line 30 of file AthTPCnvSvc.h.

Member Typedef Documentation

◆ TpCnvs_t

typedef std::vector<std::unique_ptr<ITPCnvBase> > AthTPCnvSvc::TpCnvs_t
private

Definition at line 108 of file AthTPCnvSvc.h.

Constructor & Destructor Documentation

◆ AthTPCnvSvc() [1/2]

AthTPCnvSvc::AthTPCnvSvc ( const std::string & name,
ISvcLocator * pSvcLocator )

Constructor with parameters:

Definition at line 35 of file AthTPCnvSvc.cxx.

36 :
37 base_class ( name, pSvcLocator ),
38 m_clidSvc("ClassIDSvc/ClassIDSvc", name)
39{
40}
ServiceHandle< IClassIDSvc > m_clidSvc
handle to a IClassIDSvc to handle loading of types by CLID

◆ ~AthTPCnvSvc()

AthTPCnvSvc::~AthTPCnvSvc ( )
overridevirtual

Destructor:

Definition at line 44 of file AthTPCnvSvc.cxx.

45{
46}

◆ AthTPCnvSvc() [2/2]

AthTPCnvSvc::AthTPCnvSvc ( )
private

Default constructor:

Member Function Documentation

◆ load_tpcnv()

ITPCnvBase * AthTPCnvSvc::load_tpcnv ( const std::string & cls)
overridevirtual

load the T/P converter class named cls return NULL on failure.

the converter is OWNED by the T/P converter service

Definition at line 54 of file AthTPCnvSvc.cxx.

55{
56 ITPCnvBase* cnv = ITPCnvBase::Factory::create (cls).release();
57 if (cnv == nullptr) {
58 ATH_MSG_INFO("could not load class [{}] via Reflex::PluginService", cls);
59 }
60 else {
61 std::scoped_lock lock (m_mutex);
62 m_cnvs.emplace_back (cnv);
63 }
64 return cnv;
65}
#define ATH_MSG_INFO(x,...)
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.
std::mutex m_mutex
TpCnvs_t m_cnvs
a registry of ITPCnvBase* instances

◆ p2t_cnv()

ITPCnvBase * AthTPCnvSvc::p2t_cnv ( const std::string & persClassName,
Athena::TPCnvType::Value type = Athena::TPCnvType::Athena )
overridevirtual

return the T/P converter for a persistent class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer

Definition at line 128 of file AthTPCnvSvc.cxx.

130{
131 ITPCnvBase* cnv = ITPCnvBase::Factory::create (prefix(type) + "_PERS_" + persClassName).release();
132 if (cnv == nullptr && type != Athena::TPCnvType::Athena)
133 return p2t_cnv (persClassName);
134 if (cnv == nullptr) {
135 ATH_MSG_WARNING("Could not load converter for persistent class [{}]",
136 persClassName);
137 }
138 else {
139 std::scoped_lock lock (m_mutex);
140 m_cnvs.emplace_back (cnv);
141 }
142 return cnv;
143}
#define ATH_MSG_WARNING(x,...)
virtual ITPCnvBase * p2t_cnv(const std::string &persClassName, Athena::TPCnvType::Value type=Athena::TPCnvType::Athena) override
return the T/P converter for a persistent class (NULL if failure) ITPCnvSvc owns the ITPCnvBase point...

◆ t2p_cnv() [1/2]

ITPCnvBase * AthTPCnvSvc::t2p_cnv ( const CLID & transClid,
Athena::TPCnvType::Value type = Athena::TPCnvType::Athena )
overridevirtual

return the T/P converter for a transient class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer

Definition at line 93 of file AthTPCnvSvc.cxx.

95{
96 std::string trans_type;
97 if (!m_clidSvc->getTypeNameOfID(transClid, trans_type).isSuccess()) {
98 ATH_MSG_INFO("could not get a type-name for clid [{}]", transClid);
99 return nullptr;
100 }
101
102 ITPCnvBase* cnv = ITPCnvBase::Factory::create (prefix(type) + "_TRANS_" + trans_type).release();
103 if (cnv == nullptr) {
104 // try a typeinfo-name before bailing out...
105 if (!m_clidSvc->getTypeInfoNameOfID(transClid, trans_type).isSuccess()) {
106 ATH_MSG_INFO("could not get a typeinfo-name for clid [{}]", transClid);
107 return nullptr;
108 }
109 cnv = ITPCnvBase::Factory::create (prefix(type) + "_TRANS_" + trans_type).release();
110 }
111 if (cnv == nullptr && type != Athena::TPCnvType::Athena)
112 return t2p_cnv (transClid);
113 if (cnv == nullptr) {
114 ATH_MSG_WARNING("could not load converter for transient CLID [{}] ({})",
115 transClid, trans_type);
116 }
117 else {
118 std::scoped_lock lock (m_mutex);
119 m_cnvs.emplace_back (cnv);
120 }
121 return cnv;
122}
virtual ITPCnvBase * t2p_cnv(const std::string &transClassName, Athena::TPCnvType::Value type=Athena::TPCnvType::Athena) override
return the T/P converter for a transient class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointe...

◆ t2p_cnv() [2/2]

ITPCnvBase * AthTPCnvSvc::t2p_cnv ( const std::string & transClassName,
Athena::TPCnvType::Value type = Athena::TPCnvType::Athena )
overridevirtual

return the T/P converter for a transient class (NULL if failure) ITPCnvSvc owns the ITPCnvBase pointer

Definition at line 71 of file AthTPCnvSvc.cxx.

74{
75 ITPCnvBase* cnv = ITPCnvBase::Factory::create (prefix(type) + "_TRANS_" + transClassName).release();
76 if (cnv == nullptr && type != Athena::TPCnvType::Athena)
77 return t2p_cnv (transClassName);
78 if (cnv == nullptr) {
79 ATH_MSG_WARNING("Could not load converter for transient class [{}]",
80 transClassName);
81 }
82 else {
83 std::scoped_lock lock (m_mutex);
84 m_cnvs.emplace_back (cnv);
85 }
86 return cnv;
87}

◆ t2p_cnv_unique() [1/2]

std::unique_ptr< ITPCnvBase > AthTPCnvSvc::t2p_cnv_unique ( const CLID transClid) const
overridevirtual

Return the T/P converter for a transient class.

Returns null on failure (with no warning printed). Ownership is returned to the caller.

Definition at line 161 of file AthTPCnvSvc.cxx.

162{
163 std::string trans_type;
164 if (!m_clidSvc->getTypeNameOfID(transClid, trans_type).isSuccess()) {
165 return nullptr;
166 }
167
168 std::unique_ptr<ITPCnvBase> cnv = ITPCnvBase::Factory::create (/*prefix(type) +*/ "_TRANS_" + trans_type);
169 if (cnv == nullptr) {
170 // try a typeinfo-name before bailing out...
171 if (!m_clidSvc->getTypeInfoNameOfID(transClid, trans_type).isSuccess()) {
172 return nullptr;
173 }
174 cnv = ITPCnvBase::Factory::create (/*prefix(type) +*/ "_TRANS_" + trans_type);
175 }
176 /*
177 ** FIXME: support other types.
178 if (cnv == nullptr && type != Athena::TPCnvType::Athena)
179 return t2p_cnv (transClid);
180 */
181 return cnv;
182}

◆ t2p_cnv_unique() [2/2]

std::unique_ptr< ITPCnvBase > AthTPCnvSvc::t2p_cnv_unique ( const std::string & transClassName) const
overridevirtual

return the T/P converter for a transient class (NULL if failure) Ownership is returned to the caller.

Return the T/P converter for a transient class.

Ownership is returned to the caller.

Definition at line 150 of file AthTPCnvSvc.cxx.

151{
152 return ITPCnvBase::Factory::create ("_TRANS_" + transClassName);
153}

Member Data Documentation

◆ m_clidSvc

ServiceHandle<IClassIDSvc> AthTPCnvSvc::m_clidSvc
private

handle to a IClassIDSvc to handle loading of types by CLID

Definition at line 106 of file AthTPCnvSvc.h.

◆ m_cnvs

TpCnvs_t AthTPCnvSvc::m_cnvs
private

a registry of ITPCnvBase* instances

Definition at line 111 of file AthTPCnvSvc.h.

◆ m_mutex

std::mutex AthTPCnvSvc::m_mutex
mutableprivate

Definition at line 114 of file AthTPCnvSvc.h.


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