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

#include <MultipleProxyLoader.h>

Inheritance diagram for ExpressionParsing::MultipleProxyLoader:
Collaboration diagram for ExpressionParsing::MultipleProxyLoader:

Public Types

enum  VariableType {
  VT_UNK , VT_INT , VT_DOUBLE , VT_VECINT ,
  VT_VECDOUBLE , VT_VECEMPTY
}

Public Member Functions

 MultipleProxyLoader ()
virtual ~MultipleProxyLoader ()
IProxyLoaderpush_back (std::unique_ptr< IProxyLoader > proxyLoader)
virtual void reset ()
virtual IProxyLoader::VariableType variableTypeFromString (const std::string &varname) const
virtual int loadIntVariableFromString (const std::string &varname) const
virtual double loadDoubleVariableFromString (const std::string &varname) const
virtual std::vector< int > loadVecIntVariableFromString (const std::string &varname) const
virtual std::vector< double > loadVecDoubleVariableFromString (const std::string &varname) const

Private Types

using proxyCache_t = CxxUtils::ConcurrentStrMap<IProxyLoader*, CxxUtils::SimpleUpdater>

Private Attributes

std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders
proxyCache_t m_varnameToProxyLoader ATLAS_THREAD_SAFE

Detailed Description

Definition at line 24 of file MultipleProxyLoader.h.

Member Typedef Documentation

◆ proxyCache_t

Member Enumeration Documentation

◆ VariableType

Constructor & Destructor Documentation

◆ MultipleProxyLoader()

ExpressionParsing::MultipleProxyLoader::MultipleProxyLoader ( )

Definition at line 20 of file MultipleProxyLoader.cxx.

20 :
21 m_varnameToProxyLoader(proxyCache_t::Updater_t())
22 {
23 }

◆ ~MultipleProxyLoader()

ExpressionParsing::MultipleProxyLoader::~MultipleProxyLoader ( )
virtual

Definition at line 25 of file MultipleProxyLoader.cxx.

26 {
27 }

Member Function Documentation

◆ loadDoubleVariableFromString()

double ExpressionParsing::MultipleProxyLoader::loadDoubleVariableFromString ( const std::string & varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 78 of file MultipleProxyLoader.cxx.

79 {
80 return m_varnameToProxyLoader.at(varname)->loadDoubleVariableFromString(varname);
81 }

◆ loadIntVariableFromString()

int ExpressionParsing::MultipleProxyLoader::loadIntVariableFromString ( const std::string & varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 73 of file MultipleProxyLoader.cxx.

74 {
75 return m_varnameToProxyLoader.at(varname)->loadIntVariableFromString(varname);
76 }

◆ loadVecDoubleVariableFromString()

std::vector< double > ExpressionParsing::MultipleProxyLoader::loadVecDoubleVariableFromString ( const std::string & varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 88 of file MultipleProxyLoader.cxx.

89 {
90 return m_varnameToProxyLoader.at(varname)->loadVecDoubleVariableFromString(varname);
91 }

◆ loadVecIntVariableFromString()

std::vector< int > ExpressionParsing::MultipleProxyLoader::loadVecIntVariableFromString ( const std::string & varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 83 of file MultipleProxyLoader.cxx.

84 {
85 return m_varnameToProxyLoader.at(varname)->loadVecIntVariableFromString(varname);
86 }

◆ push_back()

IProxyLoader * ExpressionParsing::MultipleProxyLoader::push_back ( std::unique_ptr< IProxyLoader > proxyLoader)

Definition at line 30 of file MultipleProxyLoader.cxx.

31 {
32 m_proxyLoaders.push_back(std::move(proxyLoader));
33 return m_proxyLoaders.back().get();
34 }
std::vector< std::unique_ptr< IProxyLoader > > m_proxyLoaders

◆ reset()

void ExpressionParsing::MultipleProxyLoader::reset ( )
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 36 of file MultipleProxyLoader.cxx.

37 {
38 for (const auto &proxyLoader : m_proxyLoaders) {
39 proxyLoader->reset();
40 }
41 }

◆ variableTypeFromString()

IProxyLoader::VariableType ExpressionParsing::MultipleProxyLoader::variableTypeFromString ( const std::string & varname) const
virtual

Implements ExpressionParsing::IProxyLoader.

Definition at line 43 of file MultipleProxyLoader.cxx.

44 {
45 auto itr = m_varnameToProxyLoader.find(varname);
46 if (itr != m_varnameToProxyLoader.end()) {
47 return itr->second->variableTypeFromString(varname);
48 }
49
51 for (const auto &proxyLoader : m_proxyLoaders) {
52 try {
53 result = proxyLoader->variableTypeFromString(varname);
54 if (result == VT_UNK) continue;
55 } catch (const std::runtime_error &) {
56 continue;
57 }
58 m_varnameToProxyLoader.emplace(varname, proxyLoader.get());
59 return result;
60 }
61 std::stringstream msg;
62 msg << "MultipleProxyLoader: unable to find valid proxy loader for " << varname << "."
63 << " If it is an xAOD element or container which is read from the input file"
64 << " this problem may occur if it is not accessed anywhere in the job via read handles."
65 << " The problem can be mitigated by providing the missing information in the property "
66 << " ExtraDataForDynamicConsumers of the sequence which has the property "
67 << " ProcessDynamicDataDependencies set to True."
68 << " The property takes a list of strings of the form \'type/container-name\' e.g."
69 << " \'xAOD::TrackParticleContainer/InDetTrackParticles\'.";
70 throw std::runtime_error(msg.str());
71 }
MsgStream & msg
Definition testRead.cxx:32

Member Data Documentation

◆ ATLAS_THREAD_SAFE

proxyCache_t m_varnameToProxyLoader ExpressionParsing::MultipleProxyLoader::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 44 of file MultipleProxyLoader.h.

◆ m_proxyLoaders

std::vector<std::unique_ptr<IProxyLoader> > ExpressionParsing::MultipleProxyLoader::m_proxyLoaders
private

Definition at line 41 of file MultipleProxyLoader.h.


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