9 #ifndef ASG_TOOLS__PROPERTY_WRAPPER_H
10 #define ASG_TOOLS__PROPERTY_WRAPPER_H
13 #ifndef XAOD_STANDALONE
15 #include <GaudiKernel/PropertyHolder.h>
42 const std::string&
title =
"");
47 const std::string&
title =
"");
50 operator const T& ()
const noexcept;
59 decltype(
auto) operator + (T2&& that)
const;
62 decltype(auto) empty ()
const {
return m_value.empty();}
63 decltype(
auto)
size ()
const {
return m_value.size();};
64 decltype(
auto)
begin ()
const {
return m_value.begin();}
65 decltype(
auto)
end ()
const {
return m_value.end();}
66 template<
typename T2> decltype(
auto) operator [] (
const T2&
index)
const {
67 return m_value[
index];}
80 const PropertyMgr::PropMap_t::value_type *m_property =
nullptr;
88 template<
typename T>
template<
typename T2>
91 const std::string&
title)
94 owner->declareProperty (
name, m_value,
title);
95 if (
auto iter = owner->getPropertyMgr()->getProperties().find(
name);
96 iter != owner->getPropertyMgr()->getProperties().end())
99 throw std::logic_error (
"PropertyWrapper::Property - property not found");
104 template<
typename T>
template<
typename T2>
107 const std::string&
title)
108 : m_value (std::move (
value))
110 owner->declareProperty (
name, m_value,
title);
111 if (
auto iter = owner->getPropertyMgr()->getProperties().find(
name);
112 iter != owner->getPropertyMgr()->getProperties().end())
115 throw std::logic_error (
"PropertyWrapper::Property - property not found");
122 operator
const T& ()
const noexcept
129 template<
typename T>
template<
typename T2>
133 m_value = std::forward<T2>(that);
139 template<
typename T>
template<
typename T2>
141 operator + (T2&& that)
const
143 return m_value + std::forward<T2>(that);
148 template<
typename T1,
typename T2>
151 return std::forward<T1>(
lh) + rh.value();
156 template<
typename T,
typename T2>
159 return lhs.value() == rhs;
164 template<
typename T,
typename T2>
167 return lhs.value() != rhs;
175 std::string propertyString;
176 if (property.getProperty()->second->
getString (propertyString).isFailure())
177 throw std::runtime_error (
"PropertyWrapper::operator << - no string conversion available");
178 return str <<
"'" <<
property.getProperty()->first <<
"': " << propertyString;