Skip to content
Snippets Groups Projects
Commit 6f671f82 authored by Markus Frank's avatar Markus Frank Committed by MarkusFrankATcernch
Browse files

Improve handle cast safety using predefined handle casts

parent 23f55da8
No related branches found
No related tags found
No related merge requests found
...@@ -106,19 +106,19 @@ namespace dd4hep { ...@@ -106,19 +106,19 @@ namespace dd4hep {
#define DD4HEP_HANDLE_PP_NARGS_COUNT() 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, ERROR #define DD4HEP_HANDLE_PP_NARGS_COUNT() 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, ERROR
// Macros to delegate to concrete, defined-arity implementations: // Macros to delegate to concrete, defined-arity implementations:
#define DD4HEP_HANDLE_XF(count, ...) DD4HEP_HANDLE_XF_IMPL (count, __VA_ARGS__) #define DD4HEP_HANDLE_VAR_ARG(count, ...) DD4HEP_HANDLE_VAR_ARG_IMPL (count, __VA_ARGS__)
#define DD4HEP_HANDLE_XF_IMPL(count, ...) DD4HEP_HANDLE_XF_ ## count (__VA_ARGS__) #define DD4HEP_HANDLE_VAR_ARG_IMPL(count, ...) DD4HEP_HANDLE_VAR_ARG_ ## count (__VA_ARGS__)
#define DD4HEP_HANDLE_XF_1(CODE,x1) DD4HEP_TEMPLATE_HANDLE(CODE,x1) #define DD4HEP_HANDLE_VAR_ARG_1(CODE,x1) DD4HEP_TEMPLATE_HANDLE(CODE,x1)
#define DD4HEP_HANDLE_XF_2(CODE,x1,x2) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x2) DD4HEP_HANDLE_XF_1(CODE,x1) #define DD4HEP_HANDLE_VAR_ARG_2(CODE,x1,x2) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x2) DD4HEP_HANDLE_VAR_ARG_1(CODE,x1)
#define DD4HEP_HANDLE_XF_3(CODE,x1,x2,x3) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x3) DD4HEP_HANDLE_XF_2(CODE,x1,x2) #define DD4HEP_HANDLE_VAR_ARG_3(CODE,x1,x2,x3) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x3) DD4HEP_HANDLE_VAR_ARG_2(CODE,x1,x2)
#define DD4HEP_HANDLE_XF_4(CODE,x1,x2,x3,x4) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x4) DD4HEP_HANDLE_XF_3(CODE,x1,x2,x3) #define DD4HEP_HANDLE_VAR_ARG_4(CODE,x1,x2,x3,x4) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x4) DD4HEP_HANDLE_VAR_ARG_3(CODE,x1,x2,x3)
#define DD4HEP_HANDLE_XF_5(CODE,x1,x2,x3,x4,x5) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x5) DD4HEP_HANDLE_XF_4(CODE,x1,x2,x3,x4) #define DD4HEP_HANDLE_VAR_ARG_5(CODE,x1,x2,x3,x4,x5) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x5) DD4HEP_HANDLE_VAR_ARG_4(CODE,x1,x2,x3,x4)
#define DD4HEP_HANDLE_XF_6(CODE,x1,x2,x3,x4,x5,x6) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x6) DD4HEP_HANDLE_XF_5(CODE,x1,x2,x3,x4,x5) #define DD4HEP_HANDLE_VAR_ARG_6(CODE,x1,x2,x3,x4,x5,x6) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x6) DD4HEP_HANDLE_VAR_ARG_5(CODE,x1,x2,x3,x4,x5)
#define DD4HEP_HANDLE_XF_7(CODE,x1,x2,x3,x4,x5,x6,x7) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x7) DD4HEP_HANDLE_XF_6(CODE,x1,x2,x3,x4,x5,x6) #define DD4HEP_HANDLE_VAR_ARG_7(CODE,x1,x2,x3,x4,x5,x6,x7) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x7) DD4HEP_HANDLE_VAR_ARG_6(CODE,x1,x2,x3,x4,x5,x6)
#define DD4HEP_HANDLE_XF_8(CODE,x1,x2,x3,x4,x5,x6,x7,x8) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x8) DD4HEP_HANDLE_XF_7(CODE,x1,x2,x3,x4,x5,x6,x7) #define DD4HEP_HANDLE_VAR_ARG_8(CODE,x1,x2,x3,x4,x5,x6,x7,x8) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x8) DD4HEP_HANDLE_VAR_ARG_7(CODE,x1,x2,x3,x4,x5,x6,x7)
#define DD4HEP_HANDLE_XF_9(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x9) DD4HEP_HANDLE_XF_8(CODE,x1,x2,x3,x4,x5,x6,x7,x8) #define DD4HEP_HANDLE_VAR_ARG_9(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x9) DD4HEP_HANDLE_VAR_ARG_8(CODE,x1,x2,x3,x4,x5,x6,x7,x8)
#define DD4HEP_HANDLE_XF_10(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x10) DD4HEP_HANDLE_XF_9(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9) #define DD4HEP_HANDLE_VAR_ARG_10(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10) DD4HEP_IMPLEMENT_SAFE_CAST(x1,x10) DD4HEP_HANDLE_VAR_ARG_9(CODE,x1,x2,x3,x4,x5,x6,x7,x8,x9)
#define DD4HEP_TEMPLATE_HANDLE(CODE,X) DD4HEP_TEMPLATE_HANDLE_CODE_##CODE(X) template class dd4hep::Handle<X> #define DD4HEP_TEMPLATE_HANDLE(CODE,X) DD4HEP_TEMPLATE_HANDLE_CODE_##CODE(X) template class dd4hep::Handle<X>
...@@ -155,7 +155,7 @@ namespace dd4hep { ...@@ -155,7 +155,7 @@ namespace dd4hep {
DD4HEP_SAFE_CAST_IMPLEMENTATION(X,X) DD4HEP_SAFE_CAST_IMPLEMENTATION(X,X)
// Delegation macro; this is the only macro you need to call from elsewhere: // Delegation macro; this is the only macro you need to call from elsewhere:
#define DD4HEP_INSTANTIATE_HANDLE_CODE(CODE,...) DD4HEP_HANDLE_XF(DD4HEP_HANDLE_PP_NARGS(__VA_ARGS__),CODE,__VA_ARGS__) #define DD4HEP_INSTANTIATE_HANDLE_CODE(CODE,...) DD4HEP_HANDLE_VAR_ARG(DD4HEP_HANDLE_PP_NARGS(__VA_ARGS__),CODE,__VA_ARGS__)
#define DD4HEP_INSTANTIATE_HANDLE(...) DD4HEP_INSTANTIATE_HANDLE_CODE(CAST_ONLY,__VA_ARGS__) #define DD4HEP_INSTANTIATE_HANDLE(...) DD4HEP_INSTANTIATE_HANDLE_CODE(CAST_ONLY,__VA_ARGS__)
#define DD4HEP_INSTANTIATE_SHAPE_HANDLE(...) DD4HEP_INSTANTIATE_HANDLE_CODE(CAST_ONLY,__VA_ARGS__,TGeoShape,TGeoBBox) #define DD4HEP_INSTANTIATE_SHAPE_HANDLE(...) DD4HEP_INSTANTIATE_HANDLE_CODE(CAST_ONLY,__VA_ARGS__,TGeoShape,TGeoBBox)
#define DD4HEP_INSTANTIATE_HANDLE_RAW(...) DD4HEP_INSTANTIATE_HANDLE_CODE(RAW,__VA_ARGS__) #define DD4HEP_INSTANTIATE_HANDLE_RAW(...) DD4HEP_INSTANTIATE_HANDLE_CODE(RAW,__VA_ARGS__)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment