5 #ifndef XAODCORE_TOOLS_AUXVARIABLE_H
6 #define XAODCORE_TOOLS_AUXVARIABLE_H
22 #define AUX_VARIABLE( VAR, ... ) \
24 static const auxid_t auxid = \
25 getAuxID( #VAR, VAR CXXUTILS_PP_FIRST( __VA_ARGS__ ) ); \
26 regAuxVar( auxid, #VAR, VAR ); \
57 template <
class VARTYPE,
class AUXBASE>
61 return VARTYPE (auxcont->memResource());
65 template <
class VARTYPE,
class AUXBASE>
73 template <
class VARTYPE,
class AUXBASE>
76 return initAuxVar2<VARTYPE> ( auxcont, std::is_constructible<VARTYPE, std::pmr::memory_resource*>() );
80 template <const
char* NAME,
class AUXBASE,
class VARTYPE>
86 auxcont->regAuxVar (auxid, NAME,
var);
87 return initAuxVar1<VARTYPE>( auxcont );
94 #define AUXVAR_DECL( TYPE, NAME, ... ) \
95 static constexpr const char NAME ## __name[] = #NAME; \
96 AuxVariable_t< TYPE AUXVAR_DECL_ALLOC_( TYPE, __VA_ARGS__ ) > NAME \
97 { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME CXXUTILS_PP_SECOND( __VA_ARGS__ ) ) }
98 #define AUXVAR_DECL_ALLOC_( TYPE, ... ) \
99 __VA_OPT__( CXXUTILS_PP_FIRST( __VA_ARGS__ )< TYPE > )
102 #define AUXVAR_PACKEDCONTAINER_DECL( TYPE, NAME ) \
103 static constexpr const char NAME ## __name[] = #NAME; \
104 SG::PackedContainer< TYPE > NAME { xAOD::detail::initAuxVar< NAME ## __name >( this, NAME ) }
107 #endif // XAODCORE_TOOLS_AUXVARIABLE_H