From 98f20889ab78f27547aa114fbd39fff179f75ffd Mon Sep 17 00:00:00 2001
From: Markus Frank <Markus.Frank@cern.ch>
Date: Mon, 6 May 2024 20:16:06 +0200
Subject: [PATCH] Add XML accessors to XML dimension

---
 DDCore/include/Parsers/detail/Dimension.h   | 10 +++++++++
 DDCore/include/Parsers/detail/Dimension.imp | 25 +++++++++++++++++++++
 2 files changed, 35 insertions(+)

diff --git a/DDCore/include/Parsers/detail/Dimension.h b/DDCore/include/Parsers/detail/Dimension.h
index 4bed94114..cdae00f1b 100644
--- a/DDCore/include/Parsers/detail/Dimension.h
+++ b/DDCore/include/Parsers/detail/Dimension.h
@@ -746,14 +746,24 @@ namespace dd4hep {
       std::string refStr() const;
       /// Access "module" attribute as STL string
       std::string moduleStr() const;
+      /// Access "module" attribute as STL string
+      std::string moduleStr(const std::string& default_value) const;
       /// Access "readout" attribute as STL string
       std::string readoutStr() const;
+      /// Access "readout" attribute as STL string
+      std::string readoutStr(const std::string& default_value) const;
       /// Access vis attribute as STL string. If not present empty return empty string
       std::string visStr() const;
+      /// Access vis attribute as STL string. If not present empty return empty string
+      std::string visStr(const std::string& default_value) const;
       /// Access region attribute as STL string. If not present empty return empty string
       std::string regionStr() const;
+      /// Access region attribute as STL string. If not present empty return empty string
+      std::string regionStr(const std::string& default_value) const;
       /// Access limits attribute as STL string. If not present empty return empty string
       std::string limitsStr() const;
+      /// Access limits attribute as STL string. If not present empty return empty string
+      std::string limitsStr(const std::string& default_value) const;
     };
 
   }       /* End namespace DD4HEP_DIMENSION_NS        */
diff --git a/DDCore/include/Parsers/detail/Dimension.imp b/DDCore/include/Parsers/detail/Dimension.imp
index baffc9042..48f6aea42 100644
--- a/DDCore/include/Parsers/detail/Dimension.imp
+++ b/DDCore/include/Parsers/detail/Dimension.imp
@@ -310,22 +310,47 @@ std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::regionStr() const {
   return m_element.hasAttr(_U(region)) ? m_element.attr < std::string > (_U(region)) : std::string();
 }
 
+/// Access "region" attribute as STL std::string. If not present returns empty string.
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::regionStr(const std::string& default_value) const {
+  return m_element.hasAttr(_U(region)) ? m_element.attr < std::string > (_U(region)) : default_value;
+}
+
 /// Access "limits" attribute as STL std::string. If not present returns empty string.
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::limitsStr() const {
   return m_element.hasAttr(_U(limits)) ? m_element.attr < std::string > (_U(limits)) : std::string();
 }
 
+/// Access "limits" attribute as STL std::string. If not present returns empty string.
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::limitsStr(const std::string& default_value) const {
+  return m_element.hasAttr(_U(limits)) ? m_element.attr < std::string > (_U(limits)) : default_value;
+}
+
 /// Access "vis" attribute as STL std::string. If not present returns empty string.
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::visStr() const {
   return m_element.hasAttr(_U(vis)) ? m_element.attr < std::string > (_U(vis)) : std::string();
 }
 
+/// Access "vis" attribute as STL std::string. If not present returns empty string.
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::visStr(const std::string& default_value) const {
+  return m_element.hasAttr(_U(vis)) ? m_element.attr < std::string > (_U(vis)) : default_value;
+}
+
 /// Access "readout" attribute as STL std::string. If not present returns empty string.
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::readoutStr() const {
   return m_element.hasAttr(_U(readout)) ? m_element.attr < std::string > (_U(readout)) : std::string();
 }
 
+/// Access "readout" attribute as STL std::string. If not present returns empty string.
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::readoutStr(const std::string& default_value) const {
+  return m_element.hasAttr(_U(readout)) ? m_element.attr < std::string > (_U(readout)) : default_value;
+}
+
 /// Access "module" attribute as STL std::string. If not present returns empty string.
 std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::moduleStr() const {
   return m_element.hasAttr(_U(module)) ? m_element.attr < std::string > (_U(module)) : std::string();
 }
+
+/// Access "module" attribute as STL std::string. If not present returns empty string.
+std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::moduleStr(const std::string& default_value) const {
+  return m_element.hasAttr(_U(module)) ? m_element.attr < std::string > (_U(module)) : default_value;
+}
-- 
GitLab