4 #ifndef ExpressionParsing_PlainAccessor_h_
5 #define ExpressionParsing_PlainAccessor_h_
9 #include "GaudiKernel/EventContext.h"
25 template <
typename T_src>
28 std::size_t
size(
const std::vector<T_src> &cont)
const {
33 T_src
get(
const std::vector<T_src> &cont)
const {
39 T_src
get(
const std::vector<T_src> &cont, std::size_t
idx)
const {
57 template <
typename T_src>
60 std::size_t
size(
const T_src &cont)
const {
66 T_src
get(
const T_src &cont)
const {
72 T_src
get(
const T_src &cont, std::size_t
idx)
const {
96 virtual std::unique_ptr<IAccessor>
createAccessor(
const std::any &handle_key)
const = 0;
97 virtual bool registerReadKey(std::unordered_map<std::string, std::any > &read_keys,
100 std::vector<Gaudi::DataHandle *> &new_input_handles,
106 std::stringstream
msg;
107 msg <<
"Failed to add read handle key for " <<
var_name;
108 throw std::runtime_error(
msg.str());
111 template <
class T_Cont>
115 std::vector<Gaudi::DataHandle *> &new_input_handles,
118 const auto &[mapIterator, inserted] = read_keys.try_emplace(
var_name, std::move(
key));
121 && mapIterator->second.type().hash_code() ==
typeid(
key).hash_code()) {
130 if (
parent.declare(*key_final).isFailure()) {
136 std::cout <<
"DEBUG PlainAccessorFactory::registerReadKey register read handle key for " <<
var_name <<
" [" <<
typeid(T_Cont).
name() <<
"]."<< std::endl;
141 template <
typename T, IProxyLoader::VariableType T_variable_type>
144 virtual std::unique_ptr<IAccessor>
createAccessor(
const std::any &handle_key)
const override {
147 return std::make_unique<GenAccessor<std::vector<T>,
156 std::vector<Gaudi::DataHandle *> &new_input_handles,
158 return PlainAccessorFactory::registerReadKey<std::vector<T> >(read_keys,
parent,
var_name, new_input_handles,
verbose);
161 template <
typename T, IProxyLoader::VariableType T_variable_type>
164 virtual std::unique_ptr<IAccessor>
createAccessor(
const std::any &handle_key)
const override {
176 std::vector<Gaudi::DataHandle *> &new_input_handles,
178 return PlainAccessorFactory::registerReadKey<T >(read_keys,
parent,
var_name, new_input_handles,
verbose);
182 template <
typename T,IProxyLoader::VariableType T_variable_type>
187 template <
typename T,IProxyLoader::VariableType T_variable_type>
195 registerPlainValueKit<bool,IProxyLoader::VT_INT>();
196 registerPlainValueKit<int,IProxyLoader::VT_INT>();
197 registerPlainValueKit<unsigned int,IProxyLoader::VT_INT>();
198 registerPlainValueKit<float,IProxyLoader::VT_DOUBLE>();
199 registerPlainValueKit<double,IProxyLoader::VT_DOUBLE>();
201 registerStdVectorKit<bool,IProxyLoader::VT_VECINT>();
202 registerStdVectorKit<int,IProxyLoader::VT_VECINT>();
203 registerStdVectorKit<unsigned int,IProxyLoader::VT_VECINT>();
204 registerStdVectorKit<float,IProxyLoader::VT_VECDOUBLE>();
205 registerStdVectorKit<double,IProxyLoader::VT_VECDOUBLE>();
208 std::unordered_map<std::size_t,std::unique_ptr<IKit> >::const_iterator
209 kit_iter=
m_kits.find(handle_key.type().hash_code());
210 if (kit_iter ==
m_kits.end()) {
211 std::stringstream
msg;
212 msg <<
"ExpressionParsing::PlainAccessorFactory: no kit for type " << handle_key.type().name();
213 throw std::runtime_error(
msg.str());
215 return kit_iter->second->createAccessor(handle_key);
218 const std::type_info &the_type,
221 std::vector<Gaudi::DataHandle *> &new_input_handles,
223 std::unordered_map<std::size_t,std::unique_ptr<IKit> >::const_iterator
224 kit_iter=
m_kits.find(the_type.hash_code());
225 if (kit_iter ==
m_kits.end()) {
227 std::cout <<
"DEBUG PlainAccessorFactory::createReadKey no matching kit for " << the_type.name() <<
" " << the_type.hash_code() << std::endl;
228 for (
const std::pair<
const std::size_t,std::unique_ptr<IKit> > &elm :
m_kits) {
229 std::cout <<
"DEBUG PlainAccessorFactory::createReadKey have " << elm.first << std::endl;
237 std::unordered_map<std::size_t,std::unique_ptr<IKit> >
m_kits;