ATLAS Offline Software
EDM_TypeInformation.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 #ifndef TRIGTYPEINFO_EDM_TYPEINFORMATION_H
7 #define TRIGTYPEINFO_EDM_TYPEINFORMATION_H
8 
9 #include "AthLinks/ElementLink.h"
10 #include "AthLinks/DataLink.h"
12 
13 #define HLT_BEGIN_TYPE_REGISTRATION typedef HLT::TypeInformation::newlist::
14 
15 //clever macro overloading from http://stackoverflow.com/questions/16683146/can-macros-be-overloaded-by-number-of-arguments?rq=1
16 
17 #define CAT( A, B ) A ## B
18 #define SELECT( NAME, NUM ) CAT( NAME ## _, NUM )
19 
20 #define GET_COUNT( _1, _2, _3, _4, _5, _6, COUNT, ... ) COUNT
21 #define VA_SIZE( ... ) GET_COUNT( __VA_ARGS__, 6, 5, 4, 3, 2, 1 )
22 
23 #define VA_SELECT( NAME, ... ) SELECT( NAME, VA_SIZE(__VA_ARGS__) )(__VA_ARGS__)
24 
25 
26 #define HLT_REGISTER_IMPL_3(OBJECT,FEATURE,CONTAINER) \
27  addWithChecking<HLT::TypeInformation::type_info<OBJECT ,HLT::TypeInformation::list<FEATURE ,HLT::\
28  TypeInformation::nil>,CONTAINER > > ::go::
29 
30 #define HLT_REGISTER_IMPL_4(OBJECT,FEATURE,CONTAINER,AUX) \
31  addWithChecking<HLT::TypeInformation::type_info<OBJECT ,HLT::TypeInformation::list<FEATURE ,HLT::\
32  TypeInformation::nil>,CONTAINER,AUX> > ::go::
33 
34 #define HLT_REGISTER_TYPE(...) VA_SELECT(HLT_REGISTER_IMPL,__VA_ARGS__)
35 
36 #define HLT_END_TYPE_REGISTRATION(name) done TypeInfo_##name;
37 
38 #endif
TypeInformation.h