The Gaudi Framework  v36r0 (4abb4d13)
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 #include <boost/utility/string_ref.hpp>
37 // ============================================================================
38 namespace {
40  struct PtrCmp {
41  bool operator()( const std::unique_ptr<std::string>& a, const std::unique_ptr<std::string>& b ) const {
42  return *a == *b;
43  }
44  };
45  struct PtrHash {
46  std::size_t operator()( const std::unique_ptr<std::string>& s ) const { return std::hash<std::string>()( *s ); }
47  };
49  std::unordered_set<std::unique_ptr<std::string>, PtrHash, PtrCmp> all_strings;
50 } // namespace
51 
53 
54 std::string_view PropertyBase::to_view( std::string str ) {
55  return **( all_strings.insert( std::make_unique<std::string>( std::move( str ) ) ).first );
56 }
57 
58 // ============================================================================
59 // the printout of the property value
60 // ============================================================================
62  return stream << " '" << name() << "':" << toString();
63 }
64 
65 // ============================================================================
66 /* simple function which check the existence of the property with
67  * the given name.
68  *
69  * @code
70  *
71  * IInterface* p = .
72  *
73  * const bool = hasProperty( p , "Context" ) ;
74  *
75  * @endcode
76  *
77  * @param p pointer to IInterface object (any component)
78  * @param name property name (case insensitive)
79  * @return true if "p" has a property with such name
80  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
81  * @date 2006-09-09
82  */
83 // ============================================================================
84 bool Gaudi::Utils::hasProperty( const IInterface* p, std::string_view name ) {
85  // delegate to another method after trivial check
86  return p && getProperty( p, name );
87 }
88 // ============================================================================
89 /* simple function which check the existence of the property with
90  * the given name.
91  *
92  * @code
93  *
94  * const IProperty* p = ... ;
95  *
96  * const bool = hasProperty( p , "Context" ) ;
97  *
98  * @endcode
99  *
100  * @param p pointer to IProperty object
101  * @param name property name (case insensitive)
102  * @return true if "p" has a property with such name
103  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
104  * @date 2006-09-09
105  */
106 // ============================================================================
107 bool Gaudi::Utils::hasProperty( const IProperty* p, std::string_view name ) {
108  // delegate the actual work to another method ;
109  return p && p->hasProperty( name );
110 }
111 // ============================================================================
112 //
113 // GaudiHandleProperty implementation
114 //
116  : PropertyWithHandlers( std::move( name_ ), typeid( GaudiHandleBase ) ), m_pValue( &ref ) {
118 }
119 
122  return useUpdateHandler();
123 }
124 
126  useReadHandler();
127  return m_pValue->typeAndName();
128 }
129 
131  useReadHandler();
132  out << m_pValue->typeAndName();
133 }
134 
136  boost::string_ref tn = s;
138  if ( ( tn.starts_with( '"' ) && tn.ends_with( '"' ) ) || ( tn.starts_with( '\'' ) && tn.ends_with( '\'' ) ) ) {
139  tn.remove_prefix( 1 );
140  tn.remove_suffix( 1 );
141  m_pValue->setTypeAndName( static_cast<std::string>( tn ) );
142  } else {
144  }
146  return StatusCode::SUCCESS;
147 }
148 
149 //
150 // GaudiHandlePropertyArray implementation
151 //
153  : PropertyWithHandlers( std::move( name_ ), typeid( GaudiHandleArrayBase ) ), m_pValue( &ref ) {
155 }
156 
159  return useUpdateHandler();
160 }
161 
163  // treat as if a Gaudi::Property<std::vector<std::string>>
164  useReadHandler();
166 }
167 
169  // treat as if a Gaudi::Property<std::vector<std::string>>
170  useReadHandler();
172 }
173 
175  // treat as if a Gaudi::Property<std::vector<std::string>>
177  StatusCode sc = Gaudi::Parsers::parse( tmp, source );
178  if ( sc.isFailure() ) return sc;
179  if ( !m_pValue->setTypesAndNames( std::move( tmp ) ) ) return StatusCode::FAILURE;
181  return StatusCode::SUCCESS;
182 }
183 
184 // ============================================================================
185 namespace {
186  template <typename C1, typename C2, typename BinaryPredicate>
187  bool equal_( const C1& c1, const C2& c2, BinaryPredicate&& p ) {
188  return std::equal( begin( c1 ), end( c1 ), begin( c2 ), end( c2 ), std::forward<BinaryPredicate>( p ) );
189  }
190 
191  // match (case insensitive) property by name
192  template <typename String>
193  auto is_iByName( String&& name ) {
194  return [name = std::forward<String>( name )]( const PropertyBase* p ) {
195  return p && equal_( name, p->name(), boost::algorithm::is_iequal{} );
196  };
197  }
198 } // namespace
199 // ============================================================================
200 /* simple function which gets the property with given name
201  * from the component
202  *
203  * @code
204  *
205  * const IProperty* p = ... ;
206  *
207  * auto pro = getProperty( p , "Context" ) ;
208  *
209  * @endcode
210  *
211  * @param p pointer to IProperty object
212  * @param name property name (case insensitive)
213  * @return property with the given name (if exists), NULL otherwise
214  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
215  * @date 2006-09-09
216  */
217 // ============================================================================
218 PropertyBase* Gaudi::Utils::getProperty( const IProperty* p, std::string_view name ) {
219  // trivial check
220  if ( !p ) { return nullptr; } // RETURN
221  // get all properties
222  const auto& props = p->getProperties();
223  // comparison criteria:
224  auto ifound = std::find_if( props.begin(), props.end(), is_iByName( name ) );
225  return ifound != props.end() ? *ifound : nullptr;
226 }
227 // ============================================================================
228 /* simple function which gets the property with given name
229  * from the component
230  *
231  * @code
232  *
233  * const IInterface* p = ... ;
234  *
235  * auto pro = getProperty( p , "Context" ) ;
236  *
237  * @endcode
238  *
239  * @param p pointer to IInterface object
240  * @param name property name (case insensitive)
241  * @return property with the given name (if exists), NULL otherwise
242  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
243  * @date 2006-09-09
244  */
245 // ============================================================================
246 PropertyBase* Gaudi::Utils::getProperty( const IInterface* p, std::string_view name ) {
247  // trivial check
248  if ( !p ) { return nullptr; } // RETURN
249  // remove const-qualifier
250  IInterface* _i = const_cast<IInterface*>( p );
251  if ( !_i ) { return nullptr; } // RETURN
252  SmartIF<IProperty> property( _i );
253  return property ? getProperty( property, name ) : nullptr;
254 }
255 // ============================================================================
256 /* check the property by name from the list of the properties
257  *
258  * @code
259  *
260  * IJobOptionsSvc* svc = ... ;
261  *
262  * const std::string client = ... ;
263  *
264  * // get the property:
265  * bool context =
266  * hasProperty ( svc->getProperties( client ) , "Context" )
267  *
268  * @endcode
269  *
270  * @see IJobOptionsSvc
271  *
272  * @param p list of properties
273  * @param name property name (case insensitive)
274  * @return true if the property exists
275  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
276  * @date 2006-09-09
277  */
278 // ============================================================================
280  // delegate to another method
281  return getProperty( p, name );
282 }
283 // ============================================================================
284 /* get the property by name from the list of the properties
285  *
286  * @code
287  *
288  * IJobOptionsSvc* svc = ... ;
289  *
290  * const std::string client = ... ;
291  *
292  * // get the property:
293  * auto context = getProperty ( svc->getProperties( client ) , "Context" )
294  *
295  * @endcode
296  *
297  * @see IJobOptionsSvc
298  *
299  * @param p list of properties
300  * @param name property name (case insensitive)
301  * @return property with the given name (if exists), NULL otherwise
302  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
303  * @date 2006-09-09
304  */
305 // ============================================================================
307  // trivial check
308  if ( !p ) { return nullptr; } // RETURN
309  auto ifound = std::find_if( p->begin(), p->end(), is_iByName( name ) );
310  return p->end() != ifound ? *ifound : nullptr; // RETURN
311 }
312 // ============================================================================
313 /* the full specialization of the
314  * method setProperty( IProperty, std::string, const TYPE&)
315  * for C-strings
316  *
317  * @param component component which needs to be configured
318  * @param name name of the property
319  * @param value value of the property
320  * @param doc the new documentation string
321  *
322  * @see IProperty
323  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
324  * @date 2007-05-13
325  */
326 // ============================================================================
327 StatusCode Gaudi::Utils::setProperty( IProperty* component, const std::string& name, const char* value,
328  const std::string& doc ) {
329  return Gaudi::Utils::setProperty( component, name, std::string{value}, doc );
330 }
331 // ============================================================================
332 /* the full specialization of the
333  * method Gaudi::Utils::setProperty( IProperty, std::string, const TYPE&)
334  * for standard strings
335  *
336  * @param component component which needs to be configured
337  * @param name name of the property
338  * @param value value of the property
339  *
340  * @see IProperty
341  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
342  * @date 2007-05-13
343  */
344 // ============================================================================
346  const std::string& doc ) {
347  if ( !component ) { return StatusCode::FAILURE; } // RETURN
348  if ( !component->hasProperty( name ) ) { return StatusCode::FAILURE; }
349  StatusCode sc = component->setPropertyRepr( name, value );
350  if ( !doc.empty() ) {
351  PropertyBase* p = getProperty( component, name );
352  if ( p ) { p->setDocumentation( doc ); }
353  }
354  sc.ignore();
355  return sc;
356 }
357 // ============================================================================
358 /* simple function to set the property of the given object from another
359  * property
360  *
361  * @code
362  *
363  * IProperty* component = ... ;
364  *
365  * const Gaudi::Details::PropertyBase* prop = ... ;
366  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
367  *
368  * @endcode
369  *
370  * @param component component which needs to be configured
371  * @param name name of the property
372  * @param property the property
373  * @param doc the new documentation string
374  *
375  * @see IProperty
376  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
377  * @date 2007-05-13
378  */
379 // ============================================================================
381  const std::string& doc ) {
382  if ( !component || !property ) return StatusCode::FAILURE;
383  PropertyBase* p = getProperty( component, name );
384  if ( !p || !p->assign( *property ) ) return StatusCode::FAILURE;
385  if ( !doc.empty() ) { p->setDocumentation( doc ); }
386  return StatusCode::SUCCESS;
387 }
388 // ============================================================================
389 /* simple function to set the property of the given object from another
390  * property
391  *
392  * @code
393  *
394  * IProperty* component = ... ;
395  *
396  * const Gaudi::Details::PropertyBase& prop = ... ;
397  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
398  *
399  * @endcode
400  *
401  * @param component component which needs to be configured
402  * @param name name of the property
403  * @param property the property
404  * @param doc the new documentation string
405  *
406  * @see IProperty
407  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
408  * @date 2007-05-13
409  */
410 // ============================================================================
412  const std::string& doc ) {
413  return setProperty( component, name, &property, doc );
414 }
415 // ============================================================================
416 /* the full specialization of the
417  * method setProperty( IInterface , std::string, const TYPE&)
418  * for standard strings
419  *
420  * @param component component which needs to be configured
421  * @param name name of the property
422  * @param value value of the property
423  * @param doc the new documentation string
424  *
425  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
426  * @date 2007-05-13
427  */
428 // ============================================================================
430  const std::string& doc ) {
431  if ( !component ) { return StatusCode::FAILURE; }
432  SmartIF<IProperty> property( component );
433  return property ? setProperty( property, name, value, doc ) : StatusCode::FAILURE;
434 }
435 // ============================================================================
436 /* the full specialization of the
437  * method setProperty( IInterface , std::string, const TYPE&)
438  * for C-strings
439  *
440  * @param component component which needs to be configured
441  * @param name name of the property
442  * @param value value of the property
443  * @param doc the new documentation string
444  *
445  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
446  * @date 2007-05-13
447  */
448 // ============================================================================
449 StatusCode Gaudi::Utils::setProperty( IInterface* component, const std::string& name, const char* value,
450  const std::string& doc ) {
451  return setProperty( component, name, std::string{value}, doc );
452 }
453 // ============================================================================
454 /* simple function to set the property of the given object from another
455  * property
456  *
457  * @code
458  *
459  * IInterface* component = ... ;
460  *
461  * const Gaudi::Details::PropertyBase* prop = ... ;
462  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
463  *
464  * @endcode
465  *
466  * @param component component which needs to be configured
467  * @param name name of the property
468  * @param property the property
469  * @param doc the new documentation string
470  *
471  * @see IProperty
472  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
473  * @date 2007-05-13
474  */
475 // ============================================================================
477  const std::string& doc ) {
478  if ( !component ) { return StatusCode::FAILURE; }
479  SmartIF<IProperty> prop( component );
480  if ( !prop ) { return StatusCode::FAILURE; }
481  return setProperty( prop, name, property, doc );
482 }
483 // ============================================================================
484 /* simple function to set the property of the given object from another
485  * property
486  *
487  * @code
488  *
489  * IInterface* component = ... ;
490  *
491  * const Gaudi::Details::PropertyBase& prop = ... ;
492  * StatusCode sc = setProperty ( component , "Data" , prop ) ;
493  *
494  * @endcode
495  *
496  * @param component component which needs to be configured
497  * @param name name of the property
498  * @param property the property
499  * @param doc the new documentation string
500  *
501  * @see IProperty
502  * @author Vanya BELYAEV ibelyaev@physics.syr.edu
503  * @date 2007-05-13
504  */
505 // ============================================================================
507  const std::string& doc ) {
508  return setProperty( component, name, &property, doc );
509 }
510 // ============================================================================
511 
512 Gaudi::Details::WeakPropertyRef::operator std::string() const {
514  return m_property ? ( ( m_property->type_info() == &typeid( std::string ) ) ? toString( m_property->toString() )
515  : m_property->toString() )
516  : m_value;
517 }
518 
519 namespace Gaudi::Details::Property {
520  namespace {
521 #ifndef GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY
522 # define GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY Ignore
523 #endif
525  } // namespace
526  ParsingErrorPolicy parsingErrorPolicy() { return g_parsingErrorPolicy; }
528  auto tmp = g_parsingErrorPolicy;
529  g_parsingErrorPolicy = p;
530  return tmp;
531  }
532 } // namespace Gaudi::Details::Property
533 
534 namespace {
535  struct InitParsingErrorPolicy {
536  InitParsingErrorPolicy() {
539  std::string policy;
540  if ( System::getEnv( "GAUDI_PROPERTY_PARSING_ERROR_DEFAULT_POLICY", policy ) ) {
541  switch ( policy[0] ) {
542  case 'I':
543  setParsingErrorPolicy( ParsingErrorPolicy::Ignore );
544  break;
545  case 'W':
546  setParsingErrorPolicy( ParsingErrorPolicy::Warning );
547  break;
548  case 'E':
549  setParsingErrorPolicy( ParsingErrorPolicy::Exception );
550  break;
551  case 'A':
552  setParsingErrorPolicy( ParsingErrorPolicy::Abort );
553  break;
554  default:
555  break;
556  }
557  }
558  }
559  } initParsingErrorPolicy;
560 } // 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:162
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:522
GaudiHandle.h
Write.stream
stream
Definition: Write.py:31
std::string
STL class.
std::equal
T equal(T... args)
setProperty
bool PyHelper() setProperty(IInterface *p, char *name, char *value)
Definition: Bootstrap.cpp:242
GaudiHandleProperty::m_pValue
GaudiHandleBase * m_pValue
Pointer to the real property.
Definition: Property.h:616
GaudiHandleProperty::GaudiHandleProperty
GaudiHandleProperty(std::string name, GaudiHandleBase &ref)
Definition: Property.cpp:115
GaudiHandleArrayProperty::value
const GaudiHandleArrayBase & value() const
Definition: Property.h:643
std::move
T move(T... args)
std::unordered_set
STL class.
GaudiHandleArrayProperty::setValue
bool setValue(const GaudiHandleArrayBase &value)
Definition: Property.cpp:157
gaudirun.s
string s
Definition: gaudirun.py:328
System::getEnv
GAUDI_API std::string getEnv(const char *var)
get a particular environment variable (returning "UNKNOWN" if not set)
Definition: System.cpp:379
std::vector< std::string >
std::find_if
T find_if(T... args)
GaudiHandleProperty::toString
std::string toString() const override
value -> string
Definition: Property.cpp:125
ToStream.h
GaudiHandleProperty::setValue
bool setValue(const GaudiHandleBase &value)
Definition: Property.cpp:120
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:23
Gaudi::Details::PropertyBase::fillStream
virtual std::ostream & fillStream(std::ostream &) const
the printout of the property value
Definition: Property.cpp:61
StatusCode
Definition: StatusCode.h:65
GaudiHandleArrayProperty::GaudiHandleArrayProperty
GaudiHandleArrayProperty(std::string name, GaudiHandleArrayBase &ref)
Definition: Property.cpp:152
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:919
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:218
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:168
SmartIF< IProperty >
compareRootHistos.ref
string ref
Definition: compareRootHistos.py:25
GaudiHandleProperty::value
const GaudiHandleBase & value() const
Definition: Property.h:606
Gaudi::Details::Property::parsingErrorPolicy
ParsingErrorPolicy parsingErrorPolicy()
Definition: Property.cpp:526
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:527
GaudiHandleArrayProperty::fromString
StatusCode fromString(const std::string &s) override
string -> value
Definition: Property.cpp:174
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:156
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:142
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:546
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:54
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:27
IInterface
Definition: IInterface.h:237
PropertyWithHandlers<>::useUpdateHandler
bool useUpdateHandler() override
use the call-back function at update, if available
Definition: Property.h:572
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:28
AlgTools.String
String
Definition: AlgTools.py:51
std::size_t
GaudiHandleProperty::fromString
StatusCode fromString(const std::string &s) override
string -> value
Definition: Property.cpp:135
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
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
getProperty
const char *PyHelper() getProperty(IInterface *p, char *name)
Definition: Bootstrap.cpp:246
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:653
PropertyWithHandlers<>::useReadHandler
void useReadHandler() const
use the call-back function at reading, if available
Definition: Property.h:569
GaudiHandleProperty::toStream
void toStream(std::ostream &out) const override
value -> stream
Definition: Property.cpp:130
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:107
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