From a87cf29a087e9bb39941de9ee8a84dc5fd91ead9 Mon Sep 17 00:00:00 2001 From: Markus FRANK <Markus.Frank@cern.ch> Date: Thu, 9 Apr 2020 17:20:29 +0200 Subject: [PATCH] Separate functionality of parsed grammars into free functions instead of templated class --- DDCore/include/DD4hep/AlignmentData.h | 1 + DDCore/include/DD4hep/Grammar.h | 3 +++ DDCore/include/DD4hep/detail/Grammar_parsed.h | 8 +++++--- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/DDCore/include/DD4hep/AlignmentData.h b/DDCore/include/DD4hep/AlignmentData.h index 1c5517547..deb0d1a47 100644 --- a/DDCore/include/DD4hep/AlignmentData.h +++ b/DDCore/include/DD4hep/AlignmentData.h @@ -196,5 +196,6 @@ namespace dd4hep { { return detectorToLocal(Position(det[0],det[1],det[2])); } }; } /* End namespace dd4hep */ +std::ostream& operator << (std::ostream& s, const dd4hep::Delta& data); std::ostream& operator << (std::ostream& s, const dd4hep::AlignmentData& data); #endif /* DD4HEP_ALIGMENTS_ALIGNMENTDATA_H */ diff --git a/DDCore/include/DD4hep/Grammar.h b/DDCore/include/DD4hep/Grammar.h index 52025d25b..ad177954b 100644 --- a/DDCore/include/DD4hep/Grammar.h +++ b/DDCore/include/DD4hep/Grammar.h @@ -214,6 +214,8 @@ namespace dd4hep { class GrammarRegistry { /// Default constructor GrammarRegistry() = default; + /// PropertyGrammar overload: Serialize a property to a string + template <typename T> static std::string str(const BasicGrammar&, const void*) { return ""; } public: /// Registry instance singleton static const GrammarRegistry& instance(); @@ -230,6 +232,7 @@ namespace dd4hep { BasicGrammar::specialization_t spec; spec.bind = detail::constructObject<T>; spec.copy = detail::copyObject<T>; + spec.str = GrammarRegistry::str<T>; return pre_note_specs<T>(spec); } template <typename T> static const GrammarRegistry& pre_note() { diff --git a/DDCore/include/DD4hep/detail/Grammar_parsed.h b/DDCore/include/DD4hep/detail/Grammar_parsed.h index d6cb82b12..0cc4c42bb 100644 --- a/DDCore/include/DD4hep/detail/Grammar_parsed.h +++ b/DDCore/include/DD4hep/detail/Grammar_parsed.h @@ -237,9 +237,11 @@ namespace dd4hep { static Grammar<TYPE> gr; if ( 0 == gr.specialization.bind ) gr.specialization.bind = detail::constructObject<TYPE>; if ( 0 == gr.specialization.copy ) gr.specialization.copy = detail::copyObject<TYPE>; - if ( 0 == gr.specialization.fromString ) gr.specialization.fromString = detail::grammar_fromString<TYPE>; - if ( 0 == gr.specialization.eval ) gr.specialization.eval = detail::grammar_eval<TYPE>; - if ( 0 == gr.specialization.str ) gr.specialization.str = detail::grammar_str<TYPE>; + if ( 0 == gr.specialization.fromString ) { + gr.specialization.fromString = detail::grammar_fromString<TYPE>; + gr.specialization.eval = detail::grammar_eval<TYPE>; + gr.specialization.str = detail::grammar_str<TYPE>; + } s_gr = &gr; return *s_gr; } -- GitLab