Loading [MathJax]/extensions/tex2jax.js
The Gaudi Framework  v36r16 (ea80daf8)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Property.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 // ============================================================================
12 // Include files
13 // ============================================================================
14 // STD & STL
15 // ============================================================================
16 #include <algorithm>
17 #include <functional>
18 #include <iostream>
19 #include <string>
20 #include <unordered_set>
21 #include <utility>
22 #include <vector>
23 // ============================================================================
24 // GaudiKernel
25 // ============================================================================
27 #include "GaudiKernel/IProperty.h"
29 #include "GaudiKernel/SmartIF.h"
30 #include <Gaudi/Property.h>
31 #include <GaudiKernel/ToStream.h>
32 // ============================================================================
33 // Boost
34 // ============================================================================
35 #include <boost/algorithm/string/compare.hpp>
36 // ============================================================================
37 namespace {
39  struct PtrCmp {
40  bool operator()( const std::unique_ptr<std::string>& a, const std::unique_ptr<std::string>& b ) const {
41  return *a == *b;
42  }
43  };
44  struct PtrHash {
45  std::size_t operator()( const std::unique_ptr<std::string>& s ) const { return std::hash<std::string>()( *s ); }
46  };
48  std::unordered_set<std::unique_ptr<std::string>, PtrHash, PtrCmp> all_strings;
49 } // namespace
50 
52 
53 std::string_view PropertyBase::to_view( std::string str ) {
54  return **( all_strings.insert( std::make_unique<std::string>( std::move( str ) ) ).first );
55 }
56 
57 // ============================================================================
58 // the printout of the property value
59 // ============================================================================
61  return stream << " '" << name() << "':" << toString();
62 }
63 
64 // ============================================================================
65 /* simple function which check the existence of the property with
66  * the given name.
67  *
68  * @code
69  *
70  * IInterface* p = .
71  *
72  * const bool = hasProperty( p , "Context" ) ;
73  *
74  * @endcode
75  *
76  * @param p pointer to IInterface object (any component)
77  * @param name property name (case insensitive)
78  * @return true if "p" has a property with such name
79  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
80  * @date 2006-09-09
81  */
82 // ============================================================================
83 bool Gaudi::Utils::hasProperty( const IInterface* p, std::string_view name ) {
84  // delegate to another method after trivial check
85  return p && getProperty( p, name );
86 }
87 // ============================================================================
88 /* simple function which check the existence of the property with
89  * the given name.
90  *
91  * @code
92  *
93  * const IProperty* p = ... ;
94  *
95  * const bool = hasProperty( p , "Context" ) ;
96  *
97  * @endcode
98  *
99  * @param p pointer to IProperty object
100  * @param name property name (case insensitive)
101  * @return true if "p" has a property with such name
102  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
103  * @date 2006-09-09
104  */
105 // ============================================================================
106 bool Gaudi::Utils::hasProperty( const IProperty* p, std::string_view name ) {
107  // delegate the actual work to another method ;
108  return p && p->hasProperty( name );
109 }
110 // ============================================================================
111 //
112 // GaudiHandleProperty implementation
113 //
115  : PropertyWithHandlers( std::move( name_ ), typeid( GaudiHandleBase ) ), m_pValue( &ref ) {
117 }
118 
121  return useUpdateHandler();
122 }
123 
125  useReadHandler();
126  return m_pValue->typeAndName();
127 }
128 
130  useReadHandler();
131  out << m_pValue->typeAndName();
132 }
133 
136  if ( s.size() > 1 && ( s.front() == '\'' || s.front() == '\"' ) && s.front() == s.back() ) {
137  m_pValue->setTypeAndName( s.substr( 1, s.size() - 2 ) );
138  } else {
140  }
142  return StatusCode::SUCCESS;
143 }
144 
145 //
146 // GaudiHandlePropertyArray implementation
147 //
149  : PropertyWithHandlers( std::move( name_ ), typeid( GaudiHandleArrayBase ) ), m_pValue( &ref ) {
151 }
152 
155  return useUpdateHandler();
156 }
157 
159  // treat as if a Gaudi::Property<std::vector<std::string>>
160  useReadHandler();
162 }
163 
165  // treat as if a Gaudi::Property<std::vector<std::string>>
166  useReadHandler();
168 }
169 
171  // treat as if a Gaudi::Property<std::vector<std::string>>
173  StatusCode sc = Gaudi::Parsers::parse( tmp, source );
174  if ( sc.isFailure() ) return sc;
175  if ( !m_pValue->setTypesAndNames( std::move( tmp ) ) ) return StatusCode::FAILURE;
177  return StatusCode::SUCCESS;
178 }
179 
180 // ============================================================================
181 namespace {
182  template <typename C1, typename C2, typename BinaryPredicate>
183  bool equal_( const C1& c1, const C2& c2, BinaryPredicate&& p ) {
184  return std::equal( begin( c1 ), end( c1 ), begin( c2 ), end( c2 ), std::forward<BinaryPredicate>( p ) );
185  }
186 
187  // match (case insensitive) property by name
188  template <typename String>
189  auto is_iByName( String&& name ) {
190  return [name = std::forward<String>( name )]( const PropertyBase* p ) {
191  return p && equal_( name, p->name(), boost::algorithm::is_iequal{} );
192  };
193  }
194 } // namespace
195 // ============================================================================
196 /* simple function which gets the property with given name
197  * from the component
198  *
199  * @code
200  *
201  * const IProperty* p = ... ;
202  *
203  * auto pro = getProperty( p , "Context" ) ;
204  *
205  * @endcode
206  *
207  * @param p pointer to IProperty object
208  * @param name property name (case insensitive)
209  * @return property with the given name (if exists), NULL otherwise
210  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
211  * @date 2006-09-09
212  */
213 // ============================================================================
214 PropertyBase* Gaudi::Utils::getProperty( const IProperty* p, std::string_view name ) {
215  // trivial check
216  if ( !p ) { return nullptr; } // RETURN
217  // get all properties
218  const auto& props = p->getProperties();
219  // comparison criteria:
220  auto ifound = std::find_if( props.begin(), props.end(), is_iByName( name ) );
221  return ifound != props.end() ? *ifound : nullptr;
222 }
223 // ============================================================================
224 /* simple function which gets the property with given name
225  * from the component
226  *
227  * @code
228  *
229  * const IInterface* p = ... ;
230  *
231  * auto pro = getProperty( p , "Context" ) ;
232  *
233  * @endcode
234  *
235  * @param p pointer to IInterface object
236  * @param name property name (case insensitive)
237  * @return property with the given name (if exists), NULL otherwise
238  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
239  * @date 2006-09-09
240  */
241 // ============================================================================
242 PropertyBase* Gaudi::Utils::getProperty( const IInterface* p, std::string_view name ) {
243  // trivial check
244  if ( !p ) { return nullptr; } // RETURN
245  // remove const-qualifier
246  IInterface* _i = const_cast<IInterface*>( p );
247  if ( !_i ) { return nullptr; } // RETURN
248  SmartIF<IProperty> property( _i );
249  return property ? getProperty( property, name ) : nullptr;
250 }
251 // ============================================================================
252 /* check the property by name from the list of the properties
253  *
254  * @code
255  *
256  * IJobOptionsSvc* svc = ... ;
257  *
258  * const std::string client = ... ;
259  *
260  * // get the property:
261  * bool context =
262  * hasProperty ( svc->getProperties( client ) , "Context" )
263  *
264  * @endcode
265  *
266  * @see IJobOptionsSvc
267  *
268  * @param p list of properties
269  * @param name property name (case insensitive)
270  * @return true if the property exists
271  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
272  * @date 2006-09-09
273  */
274 // ============================================================================
276  // delegate to another method
277  return getProperty( p, name );
278 }
279 // ============================================================================
280 /* get the property by name from the list of the properties
281  *
282  * @code
283  *
284  * IJobOptionsSvc* svc = ... ;
285  *
286  * const std::string client = ... ;
287  *
288  * // get the property:
289  * auto context = getProperty ( svc->getProperties( client ) , "Context" )
290  *
291  * @endcode
292  *
293  * @see IJobOptionsSvc
294  *
295  * @param p list of properties
296  * @param name property name (case insensitive)
297  * @return property with the given name (if exists), NULL otherwise
298  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
299  * @date 2006-09-09
300  */
301 // ============================================================================
303  // trivial check
304  if ( !p ) { return nullptr; } // RETURN
305  auto ifound = std::find_if( p->begin(), p->end(), is_iByName( name ) );
306  return p->end() != ifound ? *ifound : nullptr; // RETURN
307 }
308 // ============================================================================
309 /* the full specialization of the
310  * method setProperty( IProperty, std::string, const TYPE&)
311  * for C-strings
312  *
313  * @param component component which needs to be configured
314  * @param name name of the property
315  * @param value value of the property
316  * @param doc the new documentation string
317  *
318  * @see IProperty
319  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
320  * @date 2007-05-13
321  */
322 // ============================================================================
323 StatusCode Gaudi::Utils::setProperty( IProperty* component, const std::string& name, const char* value,
324  const std::string& doc ) {
325  return Gaudi::Utils::setProperty( component, name, std::string{ value }, doc );
326 }
327 // ============================================================================
328 /* the full specialization of the
329  * method Gaudi::Utils::setProperty( IProperty, std::string, const TYPE&)
330  * for standard strings
331  *
332  * @param component component which needs to be configured
333  * @param name name of the property
334  * @param value value of the property
335  *
336  * @see IProperty
337  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
338  * @date 2007-05-13
339  */
340 // ============================================================================
342  const std::string& doc ) {
343  if ( !component ) { return StatusCode::FAILURE; } // RETURN
344  if ( !component->hasProperty( name ) ) { return StatusCode::FAILURE; }
345  StatusCode sc = component->setPropertyRepr( name, value );
346  if ( !doc.empty() ) {
347  PropertyBase* p = getProperty( component, name );
348  if ( p ) { p->setDocumentation( doc ); }
349  }
350  sc.ignore();
351  return sc;
352 }
353 // ============================================================================
354 /* simple function to set the property of the given object from another
355  * property
356  *
357  * @code
358  *
359  * IProperty* component = ... ;
360  *
361  * const Gaudi::Details::PropertyBase* prop = ... ;
362  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
363  *
364  * @endcode
365  *
366  * @param component component which needs to be configured
367  * @param name name of the property
368  * @param property the property
369  * @param doc the new documentation string
370  *
371  * @see IProperty
372  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
373  * @date 2007-05-13
374  */
375 // ============================================================================
377  const std::string& doc ) {
378  if ( !component || !property ) return StatusCode::FAILURE;
379  PropertyBase* p = getProperty( component, name );
380  if ( !p || !p->assign( *property ) ) return StatusCode::FAILURE;
381  if ( !doc.empty() ) { p->setDocumentation( doc ); }
382  return StatusCode::SUCCESS;
383 }
384 // ============================================================================
385 /* simple function to set the property of the given object from another
386  * property
387  *
388  * @code
389  *
390  * IProperty* component = ... ;
391  *
392  * const Gaudi::Details::PropertyBase& prop = ... ;
393  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
394  *
395  * @endcode
396  *
397  * @param component component which needs to be configured
398  * @param name name of the property
399  * @param property the property
400  * @param doc the new documentation string
401  *
402  * @see IProperty
403  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
404  * @date 2007-05-13
405  */
406 // ============================================================================
408  const std::string& doc ) {
409  return setProperty( component, name, &property, doc );
410 }
411 // ============================================================================
412 /* the full specialization of the
413  * method setProperty( IInterface , std::string, const TYPE&)
414  * for standard strings
415  *
416  * @param component component which needs to be configured
417  * @param name name of the property
418  * @param value value of the property
419  * @param doc the new documentation string
420  *
421  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
422  * @date 2007-05-13
423  */
424 // ============================================================================
426  const std::string& doc ) {
427  if ( !component ) { return StatusCode::FAILURE; }
428  SmartIF<IProperty> property( component );
429  return property ? setProperty( property, name, value, doc ) : StatusCode::FAILURE;
430 }
431 // ============================================================================
432 /* the full specialization of the
433  * method setProperty( IInterface , std::string, const TYPE&)
434  * for C-strings
435  *
436  * @param component component which needs to be configured
437  * @param name name of the property
438  * @param value value of the property
439  * @param doc the new documentation string
440  *
441  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
442  * @date 2007-05-13
443  */
444 // ============================================================================
445 StatusCode Gaudi::Utils::setProperty( IInterface* component, const std::string& name, const char* value,
446  const std::string& doc ) {
447  return setProperty( component, name, std::string{ value }, doc );
448 }
449 // ============================================================================
450 /* simple function to set the property of the given object from another
451  * property
452  *
453  * @code
454  *
455  * IInterface* component = ... ;
456  *
457  * const Gaudi::Details::PropertyBase* prop = ... ;
458  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
459  *
460  * @endcode
461  *
462  * @param component component which needs to be configured
463  * @param name name of the property
464  * @param property the property
465  * @param doc the new documentation string
466  *
467  * @see IProperty
468  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
469  * @date 2007-05-13
470  */
471 // ============================================================================
473  const std::string& doc ) {
474  if ( !component ) { return StatusCode::FAILURE; }
475  SmartIF<IProperty> prop( component );
476  if ( !prop ) { return StatusCode::FAILURE; }
477  return setProperty( prop, name, property, doc );
478 }
479 // ============================================================================
480 /* simple function to set the property of the given object from another
481  * property
482  *
483  * @code
484  *
485  * IInterface* component = ... ;
486  *
487  * const Gaudi::Details::PropertyBase& prop = ... ;
488  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
489  *
490  * @endcode
491  *
492  * @param component component which needs to be configured
493  * @param name name of the property
494  * @param property the property
495  * @param doc the new documentation string
496  *
497  * @see IProperty
498  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
499  * @date 2007-05-13
500  */
501 // ============================================================================
503  const std::string& doc ) {
504  return setProperty( component, name, &property, doc );
505 }
506 // ============================================================================
507 
508 Gaudi::Details::WeakPropertyRef::operator std::string() const {
510  return m_property ? ( ( m_property->type_info() == &typeid( std::string ) ) ? toString( m_property->toString() )
511  : m_property->toString() )
512  : m_value;
513 }
514 
515 namespace Gaudi::Details::Property {
516  namespace {
517 #ifndef GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY
518 # define GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY Exception
519 #endif
521  } // namespace
522  ParsingErrorPolicy parsingErrorPolicy() { return g_parsingErrorPolicy; }
524  auto tmp = g_parsingErrorPolicy;
525  g_parsingErrorPolicy = p;
526  return tmp;
527  }
528 } // namespace Gaudi::Details::Property
529 
530 namespace {
531  struct InitParsingErrorPolicy {
532  InitParsingErrorPolicy() {
535  std::string policy;
536  if ( System::getEnv( "GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY", policy ) ) {
537  switch ( policy[0] ) {
538  case 'I':
539  setParsingErrorPolicy( ParsingErrorPolicy::Ignore );
540  break;
541  case 'W':
542  setParsingErrorPolicy( ParsingErrorPolicy::Warning );
543  break;
544  case 'E':
545  setParsingErrorPolicy( ParsingErrorPolicy::Exception );
546  break;
547  case 'A':
548  setParsingErrorPolicy( ParsingErrorPolicy::Abort );
549  break;
550  default:
551  break;
552  }
553  }
554  }
555  } initParsingErrorPolicy;
556 } // namespace
Gaudi::Details::PropertyBase
PropertyBase base class allowing PropertyBase* collections to be "homogeneous".
Definition: PropertyBase.h:35
GaudiHandleArrayProperty::toString
std::string toString() const override
value -> string
Definition: Property.cpp:158
Gaudi::Details::PropertyBase::name
const std::string name() const
property name
Definition: PropertyBase.h:39
GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY
#define GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY
Definition: Property.cpp:518
GaudiHandle.h
Write.stream
stream
Definition: Write.py:32
AlgTools.String
String
Definition: AlgTools.py:21
std::string
STL class.
std::equal
T equal(T... args)
setProperty
bool PyHelper() setProperty(IInterface *p, char *name, char *value)
Definition: Bootstrap.cpp:244
GaudiHandleProperty::m_pValue
GaudiHandleBase * m_pValue
Pointer to the real property.
Definition: Property.h:611
GaudiHandleProperty::GaudiHandleProperty
GaudiHandleProperty(std::string name, GaudiHandleBase &ref)
Definition: Property.cpp:114
GaudiHandleArrayProperty::value
const GaudiHandleArrayBase & value() const
Definition: Property.h:638
std::move
T move(T... args)
std::unordered_set
STL class.
GaudiHandleArrayProperty::setValue
bool setValue(const GaudiHandleArrayBase &value)
Definition: Property.cpp:153
gaudirun.s
string s
Definition: gaudirun.py:348
System::getEnv
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:388
std::vector< std::string >
std::find_if
T find_if(T... args)
GaudiHandleProperty::toString
std::string toString() const override
value -> string
Definition: Property.cpp:124
ToStream.h
GaudiHandleProperty::setValue
bool setValue(const GaudiHandleBase &value)
Definition: Property.cpp:119
GaudiHandleBase
Definition: GaudiHandle.h:99
Gaudi::Details::Property::ParsingErrorPolicy
ParsingErrorPolicy
Definition: Property.h:221
IProperty
Definition: IProperty.h:33
SmartIF.h
Gaudi::Details::PropertyBase::setDocumentation
void setDocumentation(std::string value)
set the documentation string
Definition: PropertyBase.h:91
TimingHistograms.name
name
Definition: TimingHistograms.py:25
Gaudi::Details::PropertyBase::fillStream
virtual std::ostream & fillStream(std::ostream &) const
the printout of the property value
Definition: Property.cpp:60
StatusCode
Definition: StatusCode.h:65
GaudiHandleArrayProperty::GaudiHandleArrayProperty
GaudiHandleArrayProperty(std::string name, GaudiHandleArrayBase &ref)
Definition: Property.cpp:148
std::ostream
STL class.
CLHEP::begin
double * begin(CLHEP::HepVector &v)
Definition: TupleAlg.cpp:45
Gaudi::Utils::setProperty
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
Definition: Property.h:914
Gaudi::Utils::getProperty
GAUDI_API Gaudi::Details::PropertyBase * getProperty(const IProperty *p, std::string_view name)
simple function which gets the property with given name from the component
Definition: Property.cpp:214
IProperty::hasProperty
virtual bool hasProperty(std::string_view name) const =0
Return true if we have a property with the given name.
GaudiHandleBase::typeAndName
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:125
GaudiHandleArrayProperty::toStream
void toStream(std::ostream &out) const override
value -> stream
Definition: Property.cpp:164
SmartIF< IProperty >
GaudiHandleProperty::value
const GaudiHandleBase & value() const
Definition: Property.h:601
Gaudi::Details::Property::parsingErrorPolicy
ParsingErrorPolicy parsingErrorPolicy()
Definition: Property.cpp:522
Gaudi::Details::PropertyBase::assign
virtual bool assign(const PropertyBase &source)=0
import the property value form the source
GaudiHandleArrayBase
Base class of array's of various gaudihandles.
Definition: GaudiHandle.h:342
Gaudi::Details::Property::setParsingErrorPolicy
ParsingErrorPolicy setParsingErrorPolicy(ParsingErrorPolicy p)
Definition: Property.cpp:523
GaudiHandleArrayProperty::fromString
StatusCode fromString(const std::string &s) override
string -> value
Definition: Property.cpp:170
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:139
GaudiHandleArrayBase::setTypesAndNames
bool setTypesAndNames(const std::vector< std::string > &myTypesAndNamesList)
Set the array of handles from list of "type/name" strings in <myTypesAndNamesList>.
Definition: GaudiHandle.cpp:63
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
Gaudi::Utils::toString
std::string toString(const TYPE &obj)
the generic implementation of the type conversion to the string
Definition: ToStream.h:353
PropertyWithHandlers
Helper class to simplify the migration old properties deriving directly from PropertyBase.
Definition: Property.h:541
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
IProperty::getProperties
virtual const std::vector< Gaudi::Details::PropertyBase * > & getProperties() const =0
Get list of properties.
ProduceConsume.props
props
Definition: ProduceConsume.py:84
std::vector::begin
T begin(T... args)
Gaudi::Details::PropertyBase::toString
virtual std::string toString() const =0
value -> string
std
STL namespace.
Gaudi::Utils::toStream
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
Definition: ToStream.h:299
AlgSequencer.c1
c1
Definition: AlgSequencer.py:33
IInterface
Definition: IInterface.h:237
PropertyWithHandlers<>::useUpdateHandler
bool useUpdateHandler() override
use the call-back function at update, if available
Definition: Property.h:567
Gaudi::Parsers::parse
StatusCode parse(GaudiUtils::HashMap< K, V > &result, const std::string &input)
Basic parser for the types of HashMap used in DODBasicMapper.
Definition: DODBasicMapper.cpp:21
std::string::empty
T empty(T... args)
AlgSequencer.c2
c2
Definition: AlgSequencer.py:34
std::size_t
GaudiHandleProperty::fromString
StatusCode fromString(const std::string &s) override
string -> value
Definition: Property.cpp:134
GaudiHandleArrayBase::typesAndNames
const std::vector< std::string > typesAndNames() const
Return a vector with "type/name" strings of all handles in the array.
Definition: GaudiHandle.cpp:78
IProperty.h
std::vector::end
T end(T... args)
IOTest.end
end
Definition: IOTest.py:123
compareRootHistos.ref
ref
Definition: compareRootHistos.py:28
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
getProperty
const char *PyHelper() getProperty(IInterface *p, char *name)
Definition: Bootstrap.cpp:248
GaudiHandleInfo::setPropertyName
void setPropertyName(std::string propName)
set name as used in declareProperty(name,gaudiHandle).
Definition: GaudiHandle.h:60
std::unique_ptr
STL class.
PropertyHolder.h
Gaudi::Details::Property
Definition: Property.h:22
GaudiHandleArrayProperty::m_pValue
GaudiHandleArrayBase * m_pValue
Pointer to the real property.
Definition: Property.h:648
PropertyWithHandlers<>::useReadHandler
void useReadHandler() const
use the call-back function at reading, if available
Definition: Property.h:564
GaudiHandleProperty::toStream
void toStream(std::ostream &out) const override
value -> stream
Definition: Property.cpp:129
Gaudi::Utils::hasProperty
GAUDI_API bool hasProperty(const IProperty *p, std::string_view name)
simple function which check the existence of the property with the given name.
Definition: Property.cpp:106
Property.h
IProperty::setPropertyRepr
virtual StatusCode setPropertyRepr(const std::string &n, const std::string &r)=0
Set the property by name and value representation.
std::hash
PrepareBase.out
out
Definition: PrepareBase.py:20
GaudiHandleBase::setTypeAndName
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:19