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;