From 919ec9f8e182c490c4619ebb5d696e70f25be9f5 Mon Sep 17 00:00:00 2001 From: Markus Frank <Markus.Frank@cern.ch> Date: Wed, 15 Mar 2017 18:05:57 +0100 Subject: [PATCH] Improve template instantiation for conditions types and grammars. --- DDCore/include/DD4hep/BasicGrammar_inl.h | 8 ++++++++ DDCore/include/DD4hep/Parsers.h | 13 ++++++++++--- DDCore/include/DD4hep/objects/ConditionsInterna.h | 1 + DDCore/src/AlignmentData.cpp | 13 ++++++++----- DDCore/src/ConditionsData.cpp | 8 ++++---- 5 files changed, 31 insertions(+), 12 deletions(-) diff --git a/DDCore/include/DD4hep/BasicGrammar_inl.h b/DDCore/include/DD4hep/BasicGrammar_inl.h index 9f629aecd..89e8bb6a1 100644 --- a/DDCore/include/DD4hep/BasicGrammar_inl.h +++ b/DDCore/include/DD4hep/BasicGrammar_inl.h @@ -331,6 +331,14 @@ namespace DD4hep { DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(x) \ DD4HEP_DEFINE_PARSER_GRAMMAR_EVAL(x,func) +#define DD4HEP_DEFINE_PARSER_GRAMMAR_DUMMY(x,func) \ + PARSERS_DECL_FOR_SINGLE(x) \ + DD4HEP_DEFINE_PARSER_GRAMMAR_TYPE(x) \ + DD4HEP_DEFINE_PARSER_GRAMMAR_EVAL(x,func) \ + namespace DD4hep { namespace Parsers { \ + int parse(x&, const std::string&) { return 1; } \ + }} + #if defined(DD4HEP_HAVE_ALL_PARSERS) #define DD4HEP_DEFINE_PARSER_GRAMMAR_CONT(x,eval_func) \ DD4HEP_DEFINE_PARSER_GRAMMAR(x,eval_func) \ diff --git a/DDCore/include/DD4hep/Parsers.h b/DDCore/include/DD4hep/Parsers.h index a84592709..4ff7529ce 100644 --- a/DDCore/include/DD4hep/Parsers.h +++ b/DDCore/include/DD4hep/Parsers.h @@ -25,9 +25,16 @@ #include <deque> // ============================================================================ -#define PARSERS_DECL_FOR_SINGLE(Type) \ - namespace DD4hep { namespace Parsers { \ - int parse(Type& result, const std::string& input); }} +#define PARSERS_DECL_FOR_SINGLE(Type) \ + namespace DD4hep { namespace Parsers { \ + int parse(Type& result, const std::string& input); \ + }} + +#define DD4HEP_DEFINE_PARSER_DUMMY(Type) \ + PARSERS_DECL_FOR_SINGLE(Type) \ + namespace DD4hep { namespace Parsers { \ + int parse(Type&, const std::string&) { return 1; } \ + }} #define PARSERS_DECL_FOR_PAIR(FirstType, SecondType) \ namespace DD4hep { namespace Parsers { \ diff --git a/DDCore/include/DD4hep/objects/ConditionsInterna.h b/DDCore/include/DD4hep/objects/ConditionsInterna.h index b700d55e7..52748fc5a 100644 --- a/DDCore/include/DD4hep/objects/ConditionsInterna.h +++ b/DDCore/include/DD4hep/objects/ConditionsInterna.h @@ -242,6 +242,7 @@ namespace DD4hep { } /* End namespace DD4hep */ #define DD4HEP_DEFINE_CONDITIONS_TYPE(x) \ + DD4HEP_DEFINE_OPAQUEDATA_TYPE(x) \ namespace DD4hep { \ namespace Conditions { \ template x& Condition::bind<x>(const std::string& val); \ diff --git a/DDCore/src/AlignmentData.cpp b/DDCore/src/AlignmentData.cpp index 793b7af6c..23b3f9c2c 100644 --- a/DDCore/src/AlignmentData.cpp +++ b/DDCore/src/AlignmentData.cpp @@ -202,13 +202,16 @@ Alignment AlignmentData::nominal() const { return detector.nominal(); } +#include "DD4hep/Parsers.h" #include "DD4hep/ToStream.h" -#include "DD4hep/objects/ConditionsInterna.h" -DD4HEP_DEFINE_OPAQUEDATA_TYPE(Delta) -DD4HEP_DEFINE_OPAQUEDATA_TYPE(AlignmentData) -DD4HEP_DEFINE_CONDITIONS_TYPE_DUMMY(Delta) -DD4HEP_DEFINE_CONDITIONS_TYPE_DUMMY(AlignmentData) +DD4HEP_DEFINE_PARSER_DUMMY(Delta) +DD4HEP_DEFINE_PARSER_DUMMY(AlignmentData) #include "DD4hep/BasicGrammar_inl.h" +#include "DD4hep/objects/ConditionsInterna.h" DD4HEP_DEFINE_PARSER_GRAMMAR(Delta,eval_none<Delta>) DD4HEP_DEFINE_PARSER_GRAMMAR(AlignmentData,eval_none<AlignmentData>) + +DD4HEP_DEFINE_CONDITIONS_TYPE(Delta) +DD4HEP_DEFINE_CONDITIONS_TYPE(AlignmentData) + diff --git a/DDCore/src/ConditionsData.cpp b/DDCore/src/ConditionsData.cpp index b159d18f7..64e683a36 100644 --- a/DDCore/src/ConditionsData.cpp +++ b/DDCore/src/ConditionsData.cpp @@ -69,10 +69,10 @@ AbstractMap& AbstractMap::operator=(const AbstractMap& c) { return *this; } +#include "DD4hep/Parsers.h" #include "DD4hep/ToStream.h" -#include "DD4hep/objects/ConditionsInterna.h" -DD4HEP_DEFINE_CONDITIONS_TYPE_DUMMY(AbstractMap) - +DD4HEP_DEFINE_PARSER_DUMMY(AbstractMap) #include "DD4hep/BasicGrammar_inl.h" +#include "DD4hep/objects/ConditionsInterna.h" DD4HEP_DEFINE_PARSER_GRAMMAR(AbstractMap,eval_none<AbstractMap>) - +DD4HEP_DEFINE_CONDITIONS_TYPE(AbstractMap) -- GitLab