5 #ifndef GAUDIKERNEL_PROPERTY_H
6 #define GAUDIKERNEL_PROPERTY_H
47 const std::string&
name ()
const {
return m_name ; }
51 const std::type_info*
type_info ()
const {
return m_typeinfo ; }
53 std::string
type ()
const {
return m_typeinfo->name() ; }
57 virtual bool assign (
const Property& source ) = 0 ;
60 virtual std::string
toString ()
const = 0 ;
62 virtual void toStream(std::ostream& out)
const = 0;
64 virtual StatusCode fromString (
const std::string& value ) = 0 ;
75 void declareReadHandler
76 (
void ( HT::* MF ) (
Property& ) , HT* instance ) ;
78 void declareUpdateHandler
79 (
void ( HT::* MF ) (
Property& ) , HT* instance ) ;
81 virtual void useReadHandler ()
const ;
83 virtual bool useUpdateHandler () ;
88 virtual Property* clone ()
const = 0 ;
90 void setName (
const std::string& value ) { m_name = value ; }
93 m_documentation = documentation; }
95 virtual std::ostream& fillStream ( std::ostream& )
const ;
99 (
const std::type_info&
type ,
100 const std::string& name =
"" ) ;
103 (
const std::string& name ,
104 const std::type_info&
type ) ;
146 template <
class TYPE>
152 typedef Gaudi::Utils::PropertyTypeTraits<TYPE>
Traits ;
154 typedef typename Traits::PVal
PVal ;
160 (
const std::string&
name ,
166 template <
class OTHER>
175 template <
class OTHER>
181 operator const TYPE& ()
const {
return value() ;}
183 inline const TYPE&
value()
const ;
196 virtual std::string
toString ()
const ;
198 virtual void toStream (std::ostream& out)
const ;
204 Traits::assign(*
m_value, value);
223 template <
class TYPE>
226 (
const std::string& name ,
229 :
Property (
typeid( TYPE ) , name )
236 template <
class TYPE>
241 , m_own ( right.
m_own )
243 m_value = Traits::copy ( right.
value() , m_own ) ;
248 template <
class TYPE>
249 template <
class OTHER>
254 , m_own ( right.
m_own )
256 m_value = Traits::copy ( right.
value() , m_own ) ;
261 template <
class TYPE>
264 Traits::dele ( m_value , m_own ) ;
270 template <
class TYPE>
274 if ( !setValue ( value ) )
275 {
throw std::out_of_range(
"Value not verified" ) ; }
281 template <
class TYPE>
288 if ( 0 != p ) {
return setValue ( p->
value() ) ; }
290 return this->fromString( source.
toString() ).isSuccess() ;
295 template <
class TYPE>
300 return dest.
assign( *
this ) ;
305 template <
class TYPE>
315 template <
class TYPE>
325 template <
class TYPE>
342 return this->
value() ;
353 template <
class TYPE>
356 { useReadHandler() ;
return *m_value ; }
360 template <
class TYPE>
373 template <
class TYPE>
374 template <
class OTHER>
395 template<
class TYPE,
class VERIFIER>
403 (
const std::string& name ,
404 typename Gaudi::Utils::PropertyTypeTraits<TYPE>::PVal value ,
418 bool set(
const TYPE&
value ) ;
422 template <
class OTHER,
class OTHERVERIFIER>
426 template <
class OTHER>
447 template <
class TYPE,
class VERIFIER>
452 if ( !m_verifier.isValid( &value ) ) {
return false ; }
454 this->i_set( value ) ;
456 return this->useUpdateHandler() ;
461 template <
class TYPE,
class VERIFIER>
471 template <
class TYPE,
class VERIFIER>
472 template <
class OTHER>
482 template <
class TYPE,
class VERIFIER>
483 template <
class OTHER,
class OTHERVERIFIER>
504 template <
class TYPE,
class VERIFIER = BoundedVerifier<TYPE> >
510 typedef Gaudi::Utils::PropertyTypeTraits<TYPE>
Traits ;
516 ( VERIFIER
verifier = VERIFIER() ) ;
519 (
const TYPE& value ,
523 (
const std::string& name ,
527 template <
class OTHER>
538 template <
class OTHER>
545 template <
class TYPE,
class VERIFIER>
547 ( VERIFIER verifier )
549 (
"" , Traits::new_() , true , verifier )
554 template <
class TYPE,
class VERIFIER>
556 (
const TYPE& value ,
559 (
"" , Traits::new_(value) , true , verifier )
564 template <
class TYPE,
class VERIFIER>
566 (
const std::string& name ,
570 ( name , Traits::new_(value) , true , verifier )
575 template <
class TYPE,
class VERIFIER>
576 template <
class OTHER>
580 ( right.
name() , Traits::new_( right.
value() ) ,
true , VERIFIER() )
585 template <
class TYPE,
class VERIFIER>
594 template <
class TYPE,
class VERIFIER>
599 template <
class TYPE,
class VERIFIER>
607 template <
class TYPE,
class VERIFIER>
618 template <
class TYPE,
class VERIFIER>
619 template <
class OTHER>
640 template<
class TYPE,
class VERIFIER = NullVerifier<TYPE> >
647 (
const std::string& name ,
649 VERIFIER verifier = VERIFIER() ) ;
659 template <
class OTHER>
668 template <
class TYPE,
class VERIFIER>
670 (
const std::string& name ,
678 template <
class TYPE,
class VERIFIER>
687 template <
class TYPE,
class VERIFIER>
692 template <
class TYPE,
class VERIFIER>
700 template <
class TYPE,
class VERIFIER>
711 template <
class TYPE,
class VERIFIER>
712 template <
class OTHER>
820 virtual std::string
toString()
const;
822 virtual void toStream(std::ostream& out)
const;
850 return destination.
assign( *
this );
879 virtual std::string
toString()
const;
881 virtual void toStream(std::ostream& out)
const;
910 return destination.
assign( *
this );
984 (
const IProperty* p ,
const std::string& name ) ;
1004 (
const IInterface* p ,
const std::string& name ) ;
1029 (
const std::vector<const Property*>* p ,
1030 const std::string& name ) ;
1055 (
const std::vector<const Property*>* p ,
1056 const std::string& name ) ;
1081 template <
class TYPE>
1084 const std::string& name ,
1086 const std::string& doc ) ;
1110 template <
class TYPE>
1113 const std::string& name ,
1115 {
return setProperty ( component , name , value , std::string() ) ; }
1132 const std::string& name ,
1133 const std::string& value ,
1134 const std::string& doc =
"" ) ;
1151 const std::string& name ,
1153 const std::string& doc =
"" ) ;
1168 template <
unsigned N>
1171 const std::string& name ,
1172 const char (&value)[
N] ,
1173 const std::string& doc =
"" )
1176 const std::string val = std::string ( value , value + N ) ;
1177 return setProperty ( component , name , val , doc ) ;
1210 template <
class TYPE>
1213 const std::string& name ,
1215 const std::string& doc )
1246 const std::string& name ,
1248 const std::string& doc =
"" ) ;
1273 const std::string& name ,
1275 const std::string& doc =
"" ) ;
1299 template <
class TYPE>
1302 const std::string& name ,
1304 const std::string& doc =
"" )
1306 const Property*
property = &value ;
1307 return setProperty ( component , name , property , doc ) ;
1330 template <
class TYPE>
1333 const std::string& name ,
1335 const std::string& doc =
"" )
1340 return setProperty ( property , name , value , doc ) ;
1357 const std::string& name ,
1358 const std::string& value ,
1359 const std::string& doc =
"" ) ;
1375 const std::string& name ,
1377 const std::string& doc =
"" ) ;
1392 template <
unsigned N>
1395 const std::string& name ,
1396 const char (&value)[N] ,
1397 const std::string& doc =
"" )
1400 const std::string val = std::string ( value , value + N ) ;
1401 return setProperty ( component , name , val , doc ) ;
1427 const std::string& name ,
1429 const std::string& doc =
"" ) ;
1454 const std::string& name ,
1456 const std::string& doc =
"" ) ;
1480 template <
class TYPE>
1484 const std::string& name ,
1486 const std::string& doc =
"" )
1488 const Property*
property = &value ;
1489 return setProperty ( component , name , property , doc ) ;
1499 #endif // GAUDIKERNEL_PROPERTY_H