ATLAS Offline Software
Loading...
Searching...
No Matches
ExpressionParsing::TMethodCollectionWrapper Class Reference

#include <xAODVariableProxyLoaders.h>

Inheritance diagram for ExpressionParsing::TMethodCollectionWrapper:
Collaboration diagram for ExpressionParsing::TMethodCollectionWrapper:

Public Member Functions

 TMethodCollectionWrapper (const std::type_info &containerTypeinfo, const std::string &methodName)
 TMethodCollectionWrapper (const TMethodCollectionWrapper &)=delete
TMethodCollectionWrapperoperator= (const TMethodCollectionWrapper &)=delete
virtual ~TMethodCollectionWrapper ()
IProxyLoader::VariableType variableType ()
virtual bool isValid (const SG::AuxElement *auxElement) const
virtual bool isValid (const SG::AuxVectorData *auxVectorData) const
virtual int getIntValue (const SG::AuxElement *auxElement) const
virtual double getDoubleValue (const SG::AuxElement *auxElement) const
virtual std::vector< int > getVecIntValue (const SG::AuxVectorData *auxVectorData)
virtual std::vector< double > getVecDoubleValue (const SG::AuxVectorData *auxVectorData)

Private Attributes

TVirtualCollectionProxy * m_collectionProxy
RootUtils::TSMethodCall m_methodCall ATLAS_THREAD_SAFE
bool m_valid

Detailed Description

Definition at line 124 of file xAODVariableProxyLoaders.h.

Constructor & Destructor Documentation

◆ TMethodCollectionWrapper() [1/2]

ExpressionParsing::TMethodCollectionWrapper::TMethodCollectionWrapper ( const std::type_info & containerTypeinfo,
const std::string & methodName )

Definition at line 89 of file xAODVariableProxyLoaders.cxx.

91 : m_collectionProxy(nullptr),
92 m_valid(false)
93 {
94 TClass *containerClass = TClass::GetClass(containerTypeinfo);
95 if (!containerClass) {
96 containerClass = TClass::GetClass(SG::normalizedTypeinfoName(containerTypeinfo).c_str());
97 if (!containerClass) return;
98 }
99
100 m_collectionProxy = containerClass->GetCollectionProxy();
101 if (!m_collectionProxy) return;
102
103 TClass *elementClass = m_collectionProxy->GetValueClass();
104 if (!elementClass) return;
105
106 m_methodCall.setProto (elementClass, methodName, "");
107
108 m_valid = m_methodCall.call() != nullptr;
109 }
std::string normalizedTypeinfoName(const std::type_info &info)
Convert a type_info to a normalized string representation (matching the names used in the root dictio...

◆ TMethodCollectionWrapper() [2/2]

ExpressionParsing::TMethodCollectionWrapper::TMethodCollectionWrapper ( const TMethodCollectionWrapper & )
delete

◆ ~TMethodCollectionWrapper()

ExpressionParsing::TMethodCollectionWrapper::~TMethodCollectionWrapper ( )
virtual

Definition at line 111 of file xAODVariableProxyLoaders.cxx.

112 {
113 }

Member Function Documentation

◆ getDoubleValue()

double ExpressionParsing::TMethodCollectionWrapper::getDoubleValue ( const SG::AuxElement * auxElement) const
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 146 of file xAODVariableProxyLoaders.cxx.

147 {
148 throw std::runtime_error("TMethodCollectionWrapper doesn't deal with scalars");
149 }

◆ getIntValue()

int ExpressionParsing::TMethodCollectionWrapper::getIntValue ( const SG::AuxElement * auxElement) const
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 141 of file xAODVariableProxyLoaders.cxx.

142 {
143 throw std::runtime_error("TMethodCollectionWrapper doesn't deal with scalars");
144 }

◆ getVecDoubleValue()

std::vector< double > ExpressionParsing::TMethodCollectionWrapper::getVecDoubleValue ( const SG::AuxVectorData * auxVectorData)
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 167 of file xAODVariableProxyLoaders.cxx.

168 {
169 double retDouble;
170 auto data_nc ATLAS_THREAD_SAFE = const_cast<SG::AuxVectorData*>(auxVectorData); // required by TVirtualCollectionProxy
171 m_collectionProxy->PushProxy(data_nc);
172 const UInt_t N = m_collectionProxy->Size();
173 std::vector<double> result(N);
174 for (UInt_t i = 0; i < N; ++i) {
175 void *element = (*m_collectionProxy)[i];
176 m_methodCall.call()->Execute(element, retDouble);
177 result[i] = (double) retDouble;
178 }
179 m_collectionProxy->PopProxy();
180 return result;
181 }
RootUtils::TSMethodCall m_methodCall ATLAS_THREAD_SAFE

◆ getVecIntValue()

std::vector< int > ExpressionParsing::TMethodCollectionWrapper::getVecIntValue ( const SG::AuxVectorData * auxVectorData)
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 151 of file xAODVariableProxyLoaders.cxx.

152 {
153 long retLong;
154 auto data_nc ATLAS_THREAD_SAFE = const_cast<SG::AuxVectorData*>(auxVectorData); // required by TVirtualCollectionProxy
155 m_collectionProxy->PushProxy(data_nc);
156 const UInt_t N = m_collectionProxy->Size();
157 std::vector<int> result(N);
158 for (UInt_t i = 0; i < N; ++i) {
159 void *element = (*m_collectionProxy)[i];
160 m_methodCall.call()->Execute(element, retLong);
161 result[i] = (int) retLong;
162 }
163 m_collectionProxy->PopProxy();
164 return result;
165 }

◆ isValid() [1/2]

bool ExpressionParsing::TMethodCollectionWrapper::isValid ( const SG::AuxElement * auxElement) const
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 131 of file xAODVariableProxyLoaders.cxx.

132 {
133 return m_valid;
134 }

◆ isValid() [2/2]

bool ExpressionParsing::TMethodCollectionWrapper::isValid ( const SG::AuxVectorData * auxVectorData) const
virtual

Implements ExpressionParsing::BaseAccessorWrapper.

Definition at line 136 of file xAODVariableProxyLoaders.cxx.

137 {
138 return m_valid;
139 }

◆ operator=()

TMethodCollectionWrapper & ExpressionParsing::TMethodCollectionWrapper::operator= ( const TMethodCollectionWrapper & )
delete

◆ variableType()

IProxyLoader::VariableType ExpressionParsing::TMethodCollectionWrapper::variableType ( )

Definition at line 115 of file xAODVariableProxyLoaders.cxx.

116 {
117 TMethodCall* mc = m_methodCall.call();
118 if (!mc) return IProxyLoader::VT_UNK;
119 switch (mc->ReturnType()) {
120 case TMethodCall::kLong:
122 case TMethodCall::kDouble:
124 case TMethodCall::kString:
125 case TMethodCall::kOther:
126 case TMethodCall::kNone:
127 default: return IProxyLoader::VT_UNK;
128 }
129 }

Member Data Documentation

◆ ATLAS_THREAD_SAFE

RootUtils::TSMethodCall m_methodCall ExpressionParsing::TMethodCollectionWrapper::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 141 of file xAODVariableProxyLoaders.h.

◆ m_collectionProxy

TVirtualCollectionProxy* ExpressionParsing::TMethodCollectionWrapper::m_collectionProxy
private

Definition at line 140 of file xAODVariableProxyLoaders.h.

◆ m_valid

bool ExpressionParsing::TMethodCollectionWrapper::m_valid
private

Definition at line 142 of file xAODVariableProxyLoaders.h.


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