1 #ifndef GAUDIKERNEL_PROPERTY_H     2 #define GAUDIKERNEL_PROPERTY_H     6 #include <boost/utility/string_ref.hpp>    72       virtual bool useUpdateHandler() = 0;
    77         return declareReadHandler( [=]( 
PropertyBase& p ) { ( instance->*MF )( p ); } );
    83         return declareUpdateHandler( [=]( 
PropertyBase& p ) { ( instance->*MF )( p ); } );
   102       template <
class OWNER>
   105         setOwnerType( 
typeid( OWNER ) );
   120           : m_name( to_view( 
std::move( 
name ) ) ), m_documentation( to_view( 
std::move( doc ) ) ), m_typeinfo( &type )
   125           : m_name( to_view( 
std::move( name ) ) ), m_documentation( m_name ), m_typeinfo( &type )
   135       static boost::string_ref to_view( 
std::string str );
   153       template <
class TYPE>
   160           if ( !
parse( tmp, s ).isSuccess() ) {
   172         template <
class TYPE>
   177       template <
class TYPE>
   182           if ( ( m_hasLowerBound && ( value < m_lowerBound ) ) || ( m_hasUpperBound && ( m_upperBound < value ) ) )
   191         const TYPE& 
lower()
 const { 
return m_lowerBound; }
   193         const TYPE& 
upper()
 const { 
return m_upperBound; }
   198           m_hasLowerBound = 
true;
   199           m_lowerBound    = value;
   204           m_hasUpperBound = 
true;
   205           m_upperBound    = value;
   210           m_hasLowerBound = 
false;
   211           m_lowerBound    = TYPE();
   216           m_hasUpperBound = 
false;
   217           m_upperBound    = TYPE();
   236         bool m_hasLowerBound{
false};
   237         bool m_hasUpperBound{
false};
   261           throw std::logic_error( 
"setUpdateHandler not implemented for this class" );
   269           if ( m_readCallBack ) {
   280           if ( m_updateCallBack ) {
   292         using ReadHandler::useReadHandler;
   293         using ReadHandler::setReadHandler;
   294         using ReadHandler::getReadHandler;
   295         using UpdateHandler::useUpdateHandler;
   296         using UpdateHandler::setUpdateHandler;
   297         using UpdateHandler::getUpdateHandler;
   312   template <
class TYPE, 
class VERIFIER = Details::Property::NullVerifier,
   313             class HANDLERS = Details::Property::UpdateHandler>
   339     template <
class T = ValueType>
   341         : Details::PropertyBase( typeid( 
ValueType ), 
std::move( name ), 
std::move( doc ) )
   342         , m_value( 
std::forward<T>( value ) )
   344       m_verifier( m_value );
   348     template <
class OWNER, 
class T = 
ValueType,
   354       owner->declareProperty( *
this );
   355       setOwnerType<OWNER>();
   360     template <
class OWNER, 
class T = 
ValueType,
   365       owner->declareProperty( *
this );
   366       setOwnerType<OWNER>();
   379     template <typename T = StorageType, typename = typename std::enable_if<!std::is_reference<T>::value>::type>
   403       return m_handlers.getReadHandler();
   408       return m_handlers.getUpdateHandler();
   414       m_handlers.useUpdateHandler( *
this );
   421       m_handlers.useReadHandler( *
this );
   434       return m_value == other;
   441       return m_value != other;
   448       return m_value < other;
   453     decltype( std::declval<ValueType>() + std::declval<T>() ) 
operator+( 
const T& other )
 const   455       return m_value + other;
   459     template <
class T = ValueType>
   463       m_value = std::forward<T>( v );
   464       m_handlers.useUpdateHandler( *
this );
   493     template <
class T = const ValueType>
   494     inline decltype( std::declval<T>().size() ) size()
 const   496       return value().
size();
   498     template <
class T = const ValueType>
   499     inline decltype( std::declval<T>().length() ) length()
 const   503     template <
class T = const ValueType>
   504     inline decltype( std::declval<T>().empty() ) empty()
 const   506       return value().
empty();
   508     template <
class T = ValueType>
   509     inline decltype( std::declval<T>().clear() ) clear()
   513     template <
class T = const ValueType>
   514     inline decltype( std::declval<T>().
begin() ) 
begin()
 const   516       return value().
begin();
   518     template <
class T = const ValueType>
   519     inline decltype( std::declval<T>().
end() ) 
end()
 const   521       return value().
end();
   523     template <
class T = ValueType>
   524     inline decltype( std::declval<T>().
begin() ) 
begin()
   526       return value().
begin();
   528     template <
class T = ValueType>
   529     inline decltype( std::declval<T>().
end() ) 
end()
   531       return value().
end();
   533     template <
class ARG, 
class T = const ValueType>
   534     inline decltype( std::declval<T>()[ARG{}] ) 
operator[]( 
const ARG& arg )
 const   538     template <
class ARG, 
class T = ValueType>
   539     inline decltype( std::declval<T>()[ARG{}] ) 
operator[]( 
const ARG& arg )
   543     template <
class T = const ValueType>
   544     inline decltype( std::declval<T>().find( 
typename T::key_type{} ) ) find( 
const typename T::key_type& key )
 const   546       return value().
find( key );
   548     template <
class T = ValueType>
   549     inline decltype( std::declval<T>().find( 
typename T::key_type{} ) ) find( 
const typename T::key_type& key )
   551       return value().
find( key );
   553     template <
class ARG, 
class T = ValueType>
   554     inline decltype( std::declval<T>().erase( ARG{} ) ) erase( ARG arg )
   556       return value().
erase( arg );
   558     template <
class = ValueType>
   564     template <
class = ValueType>
   569     template <
class = ValueType>
   575     template <
class = ValueType>
   580     template <
class T = ValueType>
   586     template <
class T = ValueType>
   604         this->fromString( source.
toString() ).ignore();
   612       return dest.
assign( *
this );
   617       using Converter = Details::Property::StringConverter<ValueType>;
   618       *
this           = 
Converter().fromString( source );
   624       using Converter = Details::Property::StringConverter<ValueType>;
   630       m_handlers.useReadHandler( *
this );
   637   template <
class T, 
class TP, 
class V, 
class H>
   644   template <
class T, 
class TP, 
class V, 
class H>
   651   template <
class T, 
class TP, 
class V, 
class H>
   652   decltype( std::declval<TP>() + std::declval<T>() ) operator+( const T& v, const 
Property<TP, V, H>& p )
   654     return v + p.
value();
   657   template <
class TYPE, 
class HANDLERS = Details::Property::UpdateHandler>
   660   template <
class TYPE>
   666 template <
class TYPE>
   669 template <
class TYPE>
   750 template <
typename Handler = 
typename Gaudi::Details::Property::UpdateHandler>
   782     m_handlers.useUpdateHandler( *
this );
   807   bool load( PropertyBase& destination )
 const override { 
return destination.assign( *
this ); }
   809   bool assign( 
const PropertyBase& source )
 override { 
return fromString( source.toString() ); }
   847   bool load( PropertyBase& destination )
 const override { 
return destination.assign( *
this ); }
   849   bool assign( 
const PropertyBase& source )
 override { 
return fromString( source.toString() ); }
  1024     template <
class TYPE>
  1049     template <
class TYPE>
  1100     template <
unsigned N>
  1137     template <
class TYPE>
  1140       return component && 
hasProperty( component, name )
  1215     template <
class TYPE>
  1219       return setProperty( component, name, &value, doc );
  1242     template <
class TYPE>
  1296     template <
unsigned N>
  1300       if ( 0 == component ) {
  1376     template <
class TYPE>
  1380       return setProperty( component, name, &value, doc );
  1388 #endif // GAUDIKERNEL_PROPERTY_H Gaudi::Property< std::vector< float > & > FloatArrayPropertyRef
 
StatusCode setProperty(IProperty *component, const std::string &name, const TYPE &value, const std::string &doc)
simple function to set the property of the given object from the value 
 
Gaudi::Property< signed char & > SignedCharPropertyRef
 
Details::Property::NullVerifier VerifierType
 
Gaudi::Property< std::vector< signed char > & > SignedCharArrayPropertyRef
 
Property(OWNER *owner, std::string name)
Autodeclaring constructor with property name, value and documentation. 
 
std::function< void(PropertyBase &)> m_readCallBack
 
std::string toString(const TYPE &v)
 
Gaudi::Property< unsigned int & > UnsignedIntegerPropertyRef
 
bool operator!=(const T &v, const Property< TP, V, H > &p)
delegate (value != property) to property operator!= 
 
GaudiHandleProperty * clone() const  override
clones the current property 
 
bool setValue(const ValueType &v)
 
std::ostream & toStream(ITERATOR first, ITERATOR last, std::ostream &s, const std::string &open, const std::string &close, const std::string &delim)
the helper function to print the sequence 
 
std::function< void(PropertyBase &)> getReadHandler() const 
 
void useUpdateHandler(const PropertyBase &) const 
 
Gaudi::Property< std::vector< unsigned short > > UnsignedShortArrayProperty
 
Gaudi::Property< TYPE > SimpleProperty
 
Gaudi::Property< long long & > LongLongPropertyRef
 
PropertyBase & declareReadHandler(void(HT::*MF)(PropertyBase &), HT *instance)
 
Gaudi::Property< std::vector< int > > IntegerArrayProperty
 
std::ostream & operator<<(std::ostream &stream, const PropertyBase &prop)
 
bool operator==(const T &v, const Property< TP, V, H > &p)
delegate (value == property) to property operator== 
 
bool useUpdateHandler() override
manual trigger for callback for update 
 
void setDocumentation(std::string value)
set the documentation string 
 
Gaudi::Property< long long > LongLongProperty
 
const std::function< void(PropertyBase &)> readCallBack() const  override
get a reference to the readCallBack 
 
Implementation of property with value of concrete type. 
 
Gaudi::Property< long & > LongPropertyRef
 
std::function< void(PropertyBase &)> m_updateCallBack
 
virtual PropertyBase & declareUpdateHandler(std::function< void(PropertyBase &)> fun)=0
set new callback for update 
 
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type. 
 
Gaudi::Property< std::vector< double > & > DoubleArrayPropertyRef
 
virtual bool assign(const PropertyBase &source)=0
import the property value form the source 
 
The declaration of major parsing functions used e.g for (re)implementation of new extended properties...
 
bool load(PropertyBase &destination) const  override
 
const std::string name() const 
property name 
 
Property & operator=(T &&v)
Assignment from value. 
 
Gaudi::Property< float > FloatProperty
 
Gaudi::Property< int > IntegerProperty
 
Gaudi::Property< std::vector< unsigned long long > & > UnsignedLongLongArrayPropertyRef
 
void setOwnerType()
set the type of the owner class (used for documentation) 
 
void clearUpper()
Clear upper bound value. 
 
const TYPE & upper() const 
Return the upper bound value. 
 
GaudiHandleArrayProperty * clone() const  override
clones the current property 
 
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string 
 
Gaudi::Property< unsigned long long > UnsignedLongLongProperty
 
Gaudi::Property< float & > FloatPropertyRef
 
vector< std::string > StorageType
Hosted type. 
 
Gaudi::Details::PropertyBase * property(const std::string &name) const 
 
std::string ownerTypeName() const 
get the string for the type of the owner class (used for documentation) 
 
std::string toString() const  override
value -> string 
 
Gaudi::Property< std::vector< std::string > > StringArrayProperty
 
Gaudi::Property< std::vector< unsigned short > & > UnsignedShortArrayPropertyRef
 
StatusCode parse(GaudiUtils::HashMap< K, V > &result, const std::string &input)
Basic parser for the types of HashMap used in DODBasicMapper. 
 
Gaudi::Property< std::vector< unsigned char > > UnsignedCharArrayProperty
 
void setLower(const TYPE &value)
Set lower bound value. 
 
Gaudi::Property< unsigned short > UnsignedShortProperty
 
const std::function< void(Details::PropertyBase &)> updateCallBack() const  override
get a reference to the updateCallBack 
 
Gaudi::Property< unsigned long > UnsignedLongProperty
 
Gaudi::Property< std::string & > StringPropertyRef
 
StorageType m_value
Storage. 
 
Gaudi::Property< char & > CharPropertyRef
 
Gaudi::Property< std::vector< bool > & > BooleanArrayPropertyRef
 
Gaudi::Property< std::vector< long double > > LongDoubleArrayProperty
 
Gaudi::Property< std::vector< long long > > LongLongArrayProperty
 
Gaudi::Property< std::vector< double > > DoubleArrayProperty
 
bool operator<(const T &other) const 
"less" comparison 
 
void setOwnerType(const std::type_info &ownerType)
set the type of the owner class (used for documentation) 
 
virtual std::string toString() const  =0
value -> string 
 
Gaudi::Property< std::vector< short > > ShortArrayProperty
 
Gaudi::Details::PropertyBase Property
backward compatibility hack for old Property base class 
 
Gaudi::Property< std::vector< unsigned long > & > UnsignedLongArrayPropertyRef
 
Gaudi::Property< std::vector< unsigned int > > UnsignedIntegerArrayProperty
 
PropertyBase(const std::type_info &type, std::string name="", std::string doc="")
constructor from the property name and the type 
 
Details::PropertyBase & declareUpdateHandler(std::function< void(Details::PropertyBase &)> fun) override
set new callback for update 
 
Property()
Construct an anonymous property with default constructed value. 
 
auto begin(reverse_wrapper< T > &w)
 
Helper class to simplify the migration old properties deriving directly from PropertyBase. 
 
PropertyMgr & operator=(const PropertyMgr &)=delete
 
Property & operator+=(const T &other)
 
Gaudi::Property< std::vector< long > > LongArrayProperty
 
typename std::remove_reference< StorageType >::type ValueType
 
Gaudi::Property< std::vector< long > & > LongArrayPropertyRef
 
void operator()(PropertyBase &p) const 
 
void operator()(const TYPE &value) const 
 
Gaudi::Property< signed char > SignedCharProperty
 
Gaudi::Property< char > CharProperty
 
Property & operator-=(const T &other)
 
const VerifierType & verifier() const 
Accessor to verifier. 
 
Gaudi::Property< int & > IntegerPropertyRef
 
GaudiHandleBase * m_pValue
Pointer to the real property. 
 
Gaudi::Property< unsigned long & > UnsignedLongPropertyRef
 
const std::type_info * ownerType() const 
get the type of the owner class (used for documentation) 
 
boost::string_ref m_name
property name 
 
PropertyBase(std::string name, const std::type_info &type)
constructor from the property name and the type 
 
bool hasProperty(const std::string &name) const  override
Return true if we have a property with the given name. 
 
void setBounds(const TYPE &lower, const TYPE &upper)
Set both bounds (lower and upper) at the same time. 
 
Gaudi::Property< std::vector< long double > & > LongDoubleArrayPropertyRef
 
This class is used for returning status codes from appropriate routines. 
 
Property(std::string name, T &&value, std::string doc="")
the constructor with property name, value and documentation. 
 
Definition of the basic interface. 
 
const std::type_info * m_typeinfo
property type 
 
Gaudi::Property< unsigned int > UnsignedIntegerProperty
 
TYPE fromString(const std::string &s)
 
const TYPE & lower() const 
Return the lower bound value. 
 
Gaudi::Property< std::vector< char > > CharArrayProperty
 
virtual PropertyBase & declareReadHandler(std::function< void(PropertyBase &)> fun)=0
set new callback for reading 
 
const GaudiHandleBase & value() const 
 
Gaudi::Property< bool > BooleanProperty
 
PropertyBase & declareUpdateHandler(std::function< void(PropertyBase &)> fun) override
set new callback for update 
 
Gaudi::Property< std::vector< unsigned long long > > UnsignedLongLongArrayProperty
 
VerifierType & verifier()
Accessor to verifier. 
 
PropertyBase & declareReadHandler(std::function< void(PropertyBase &)> fun) override
set new callback for reading 
 
const GaudiHandleArrayBase & value() const 
 
auto end(reverse_wrapper< T > &w)
 
PropertyBase base class allowing PropertyBase* collections to be "homogeneous". 
 
virtual std::ostream & fillStream(std::ostream &) const 
the printout of the property value 
 
PropertyBase & declareUpdateHandler(void(HT::*MF)(PropertyBase &), HT *instance)
 
bool hasLower() const 
Return if it has a lower bound. 
 
Gaudi::Property< double > DoubleProperty
 
void setName(std::string value)
set the new value for the property name 
 
Gaudi::Property< std::vector< int > & > IntegerArrayPropertyRef
 
bool assign(const PropertyBase &source) override
 
void operator()(const TYPE &) const 
 
Gaudi::Property< std::vector< long long > & > LongLongArrayPropertyRef
 
Gaudi::Property< double & > DoublePropertyRef
 
std::function< void(PropertyBase &)> getUpdateHandler() const 
 
bool operator==(const T &other) const 
equality comparison 
 
Gaudi::Property< std::vector< unsigned char > & > UnsignedCharArrayPropertyRef
 
void useReadHandler(const PropertyBase &p) const 
 
bool hasUpper() const 
Return if it has a lower bound. 
 
bool load(Details::PropertyBase &dest) const  override
set value to another property 
 
Base class of array's of various gaudihandles. 
 
std::function< void(PropertyBase &)> getUpdateHandler() const 
 
Gaudi::Property< long double & > LongDoublePropertyRef
 
void useReadHandler() const 
use the call-back function at reading, if available 
 
Gaudi::Property< std::vector< signed char > > SignedCharArrayProperty
 
bool useUpdateHandler() override
use the call-back function at update, if available 
 
Gaudi::Property< std::string > StringProperty
 
void setUpdateHandler(std::function< void(PropertyBase &)> fun)
 
Gaudi::Property< long double > LongDoubleProperty
 
GaudiHandleArrayProperty & operator=(const GaudiHandleArrayBase &value)
 
SwapCall(callback_t &input)
 
GaudiHandleArrayBase * m_pValue
Pointer to the real property. 
 
double fun(const std::vector< double > &x)
 
Gaudi::Property< short > ShortProperty
 
std::string type() const 
property type 
 
std::string documentation() const 
property documentation 
 
Gaudi::Property< std::vector< unsigned long > > UnsignedLongArrayProperty
 
Details::PropertyBase * clone() const  override
clones the current property 
 
Gaudi::Property< TYPE & > SimplePropertyRef
 
Gaudi::Property< unsigned long long & > UnsignedLongLongPropertyRef
 
void clearBounds()
Clear both bounds (lower and upper) at the same time. 
 
void setReadHandler(std::function< void(PropertyBase &)> fun)
 
GAUDI_API const Gaudi::Details::PropertyBase * getProperty(const std::vector< const Gaudi::Details::PropertyBase * > *p, const std::string &name)
get the property by name from the list of the properties 
 
StatusCode setProperty(IInterface *component, const std::string &name, const Gaudi::Property< TYPE > &value, const std::string &doc="")
simple function to set the property of the given object from another property 
 
std::function< void(PropertyBase &)> getReadHandler() const 
 
Gaudi::Property< std::vector< std::string > & > StringArrayPropertyRef
 
bool assign(const Details::PropertyBase &source) override
get the value from another property 
 
bool assign(const PropertyBase &source) override
 
bool operator!=(const T &other) const 
inequality comparison 
 
Gaudi::Property< long > LongProperty
 
void setUpdateHandler(std::function< void(PropertyBase &)>)
 
Gaudi::Property< std::vector< char > & > CharArrayPropertyRef
 
const ValueType & value() const 
Backward compatibility (. 
 
void clearLower()
Clear lower bound value. 
 
Base class to handles to be used in lieu of naked pointers to various Gaudi components. 
 
implementation of various functions for streaming. 
 
Property(T &&v)
Construct an anonymous property from a value. 
 
Gaudi::Property< unsigned short & > UnsignedShortPropertyRef
 
Gaudi::Property< std::vector< float > > FloatArrayProperty
 
ValueType operator++(int)
 
The IProperty is the basic interface for all components which have properties that can be set or get...
 
helper to disable a while triggering it, to avoid infinite recursion 
 
boost::string_ref m_documentation
property doc string 
 
bool load(PropertyBase &destination) const  override
 
GaudiHandleProperty & operator=(const GaudiHandleBase &value)
 
Gaudi::Property< std::vector< short > & > ShortArrayPropertyRef
 
Property(OWNER *owner, std::string name, T &&value, std::string doc="")
Autodeclaring constructor with property name, value and documentation. 
 
const std::function< void(PropertyBase &)> updateCallBack() const  override
get a reference to the updateCallBack 
 
Details::PropertyBase & declareReadHandler(std::function< void(Details::PropertyBase &)> fun) override
set new callback for reading 
 
Helper functions to set/get the application return code. 
 
Gaudi::Property< unsigned char > UnsignedCharProperty
 
const std::function< void(Details::PropertyBase &)> readCallBack() const  override
get a reference to the readCallBack 
 
Gaudi::Property< short & > ShortPropertyRef
 
void setUpper(const TYPE &value)
Set upper bound value. 
 
void setReadHandler(std::function< void(PropertyBase &)>)
 
Details::Property::UpdateHandler HandlersType
 
Gaudi::Property< unsigned char & > UnsignedCharPropertyRef
 
ValueType operator--(int)
 
decltype(std::declval< TP >()+std::declval< T >()) operator+(const T &v, const Property< TP, V, H > &p)
implemantation of (value + property) 
 
void useReadHandler(const PropertyBase &) const 
 
Gaudi::Property< std::vector< bool > > BooleanArrayProperty
 
const std::type_info * type_info() const 
property type-info 
 
Gaudi::Property< std::vector< unsigned int > & > UnsignedIntegerArrayPropertyRef
 
StatusCode fromString(const std::string &source) override
string -> value 
 
void toStream(std::ostream &out) const  override
value -> stream 
 
Gaudi::Property< bool & > BooleanPropertyRef
 
void useUpdateHandler(PropertyBase &p)