diff --git a/DDCore/include/Parsers/detail/Dimension.h b/DDCore/include/Parsers/detail/Dimension.h index 6ccb6819d3c06b8c2b1de8c841f2b06635400fe8..4bed941144698979e956a44ff12f73b3e0b94756 100644 --- a/DDCore/include/Parsers/detail/Dimension.h +++ b/DDCore/include/Parsers/detail/Dimension.h @@ -724,16 +724,26 @@ namespace dd4hep { /// Access "name" attribute as STL string std::string nameStr() const; - /// Access "ref" attribute as a string - std::string refStr() const; + /// Access "name" attribute as STL string. Return default value if not present + std::string nameStr(const std::string& default_value) const; /// Access "type" attribute as STL string std::string typeStr() const; + /// Access "type" attribute as STL string. Return default value if not present + std::string typeStr(const std::string& default_value) const; /// Access "value" attribute as STL string std::string valueStr() const; + /// Access "value" attribute as STL string. Return default value if not present + std::string valueStr(const std::string& default_value) const; /// Access "label" attribute as STL string std::string labelStr() const; + /// Access "label" attribute as STL string. Return default value if not present + std::string labelStr(const std::string& default_value) const; /// Access "symbol" attribute as STL string std::string symbolStr() const; + /// Access "symbol" attribute as STL string. Return default value if not present + std::string symbolStr(const std::string& default_value) const; + /// Access "ref" attribute as a string + std::string refStr() const; /// Access "module" attribute as STL string std::string moduleStr() const; /// Access "readout" attribute as STL string diff --git a/DDCore/include/Parsers/detail/Dimension.imp b/DDCore/include/Parsers/detail/Dimension.imp index e9c27e70326b0050b3860579370f3f23f3cf2ff8..baffc9042fddf59e2e00d0268f2e602e9444e2ea 100644 --- a/DDCore/include/Parsers/detail/Dimension.imp +++ b/DDCore/include/Parsers/detail/Dimension.imp @@ -240,37 +240,71 @@ XML_CHILD_ACCESSOR_XML_DIM(beampipe) XML_CHILD_ACCESSOR_XML_DIM(shape) XML_CHILD_ACCESSOR_XML_DIM(solid) -std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::padType() const { - return m_element.attr < std::string > (_U(pads)); -} - +/// Access "name" attribute as STL std::string std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::nameStr() const { return m_element.attr < std::string > (_U(name)); } -std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::refStr() const { - return m_element.attr < std::string > (_U(ref)); +/// Access "name" attribute as STL std::string. Return default value if not present +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::nameStr(const std::string& default_value) const { + Attribute attr = m_element.attr_nothrow(_U(name)); + return attr ? m_element.attr < std::string >(attr) : default_value; } +/// Access "type" attribute as STL std::string std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::typeStr() const { return m_element.attr < std::string > (_U(type)); } +/// Access "type" attribute as STL std::string. Return default value if not present +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::typeStr(const std::string& default_value) const { + Attribute attr = m_element.attr_nothrow(_U(type)); + return attr ? m_element.attr < std::string >(attr) : default_value; +} + /// Access "value" attribute as STL std::string std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::valueStr() const { return m_element.attr < std::string > (_U(value)); } +/// Access "value" attribute as STL std::string. Return default value if not present +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::valueStr(const std::string& default_value) const { + Attribute attr = m_element.attr_nothrow(_U(value)); + return attr ? m_element.attr < std::string >(attr) : default_value; +} + /// Access "label" attribute as STL std::string std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::labelStr() const { return m_element.attr < std::string > (_U(label)); } +/// Access "label" attribute as STL std::string. Return default value if not present +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::labelStr(const std::string& default_value) const { + Attribute attr = m_element.attr_nothrow(_U(label)); + return attr ? m_element.attr < std::string >(attr) : default_value; +} + /// Access "symbol" attribute as STL std::string std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::symbolStr() const { return m_element.attr < std::string > (_U(symbol)); } +/// Access "symbol" attribute as STL std::string. Return default value if not present +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::symbolStr(const std::string& default_value) const { + Attribute attr = m_element.attr_nothrow(_U(symbol)); + return attr ? m_element.attr < std::string >(attr) : default_value; +} + +/// Access "padType" attribute as STL std::string +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::padType() const { + return m_element.attr < std::string > (_U(pads)); +} + +/// Access "ref" attribute as STL std::string +std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::refStr() const { + return m_element.attr < std::string > (_U(ref)); +} + /// Access "region" attribute as STL std::string. If not present returns empty string. std::string dd4hep::DD4HEP_DIMENSION_NS::Dimension::regionStr() const { return m_element.hasAttr(_U(region)) ? m_element.attr < std::string > (_U(region)) : std::string(); diff --git a/DDCore/include/XML/UnicodeValues.h b/DDCore/include/XML/UnicodeValues.h index ec4f9786a29d27d7f4d708e491e4821aafbcda1d..9a41be51e25051a995220101c72de21b96aa0c0a 100644 --- a/DDCore/include/XML/UnicodeValues.h +++ b/DDCore/include/XML/UnicodeValues.h @@ -380,6 +380,7 @@ UNICODE (positionRPhiZ); UNICODE (pressure); UNICODE (projective_cylinder); UNICODE (projective_zplane); +UNICODE (propagate); UNICODE (property); UNICODE (properties); UNICODE (psi); diff --git a/DDCore/include/XML/XMLElements.h b/DDCore/include/XML/XMLElements.h index f3c2757c28129caeec06a7a8dd7093b0b81b9946..954f5f3592d745f02332c8ac785fbe5e3c828f4d 100644 --- a/DDCore/include/XML/XMLElements.h +++ b/DDCore/include/XML/XMLElements.h @@ -565,6 +565,11 @@ namespace dd4hep { return _toString(attr_value(tag_value)); } + template <> INLINE Attribute Handle_t::attr<Attribute>(const XmlChar* tag_value, Attribute default_value) const { + Attribute a = attr_nothrow(tag_value); + return a ? a : default_value; + } + template <> INLINE bool Handle_t::attr<bool>(const XmlChar* tag_value, bool default_value) const { Attribute a = attr_nothrow(tag_value); return a ? _toBool(attr_value(a)) : default_value;