1 #ifndef GAUDIKERNEL_GAUDIHANDLE_H
2 #define GAUDIKERNEL_GAUDIHANDLE_H
5 #include "GaudiKernel/IInterface.h"
6 #include "GaudiKernel/System.h"
7 #include "GaudiKernel/GaudiException.h"
26 : m_componentType(
std::move(myComponentType)), m_parentName(
std::move(myParentName))
35 return m_componentType;
40 return m_propertyName;
45 m_propertyName = std::move(propName);
56 virtual std::string pythonPropertyClassName()
const = 0;
62 virtual std::string pythonRepr()
const = 0;
98 std::string myParentName )
101 setTypeAndName(std::move(myTypeAndName));
109 return m_typeAndName;
113 std::string
type()
const;
116 std::string
name()
const;
120 return m_typeAndName.empty();
124 void setTypeAndName( std::string myTypeAndName );
127 void setName(
const std::string& myName );
135 std::string messageName()
const;
164 GaudiHandle( std::string myTypeAndName, std::string myComponentType,
165 std::string myParentName )
174 if ( m_pObject ) m_pObject->addRef();
179 GaudiHandleBase::operator=( other );
184 if ( m_pObject ) m_pObject->addRef();
191 if ( retrieve( m_pObject ).isFailure() ) {
210 return m_pObject || retrieve().isSuccess();
215 operator bool()
const {
256 if ( defName.empty() ) defName = getDefaultType();
274 const std::string& myType = getDefaultType();
294 mutable T* m_pObject =
nullptr;
315 bool setTypesAndNames(
const std::vector< std::string >& myTypesAndNamesList );
319 const std::vector< std::string > typesAndNames()
const;
322 const std::vector< std::string > types()
const;
325 const std::vector< std::string > names()
const;
329 const std::vector< std::string > getBaseInfos( std::string (
GaudiHandleBase::*pMemFunc)()
const )
const;
344 virtual bool push_back(
const std::string& myHandleTypeAndName ) = 0;
347 virtual void clear() = 0;
350 virtual bool empty()
const = 0;
354 virtual ConstBaseHandleArray getBaseArray()
const = 0;
358 virtual BaseHandleArray getBaseArray() = 0;
388 std::string myComponentType, std::string myParentName )
413 iterator it =
begin(), itEnd =
end();
414 for ( ; it != itEnd; ++it ) baseArray.push_back( &*it );
420 const_iterator it =
begin(), itEnd =
end();
421 for ( ; it != itEnd; ++it ) baseArray.push_back( &*it );
429 return m_handleArray.begin();
433 return m_handleArray.end();
437 return m_handleArray.begin();
440 const_iterator
end()
const {
441 return m_handleArray.end();
445 return m_handleArray.rbegin();
449 return m_handleArray.rend();
453 return m_handleArray.size();
457 m_handleArray.clear();
461 return m_handleArray.empty();
465 return m_handleArray[index];
469 return m_handleArray[index];
474 auto it = std::find_if(
begin(),
end(),[&](const_reference r) {
475 return r.name() ==
name;
477 return it !=
end() ? &*it :
nullptr;
482 auto it = std::find_if(
begin(),
end(),[&](const_reference r) {
483 return r.name() ==
name;
485 return it !=
end() ? &*it :
nullptr;
492 m_handleArray.push_back( myHandle );
498 for (
auto&
i : *
this) {
508 for (
auto&
i : *
this ) {
526 #endif // ! GAUDIKERNEL_GAUDIHANDLE_H
GaudiHandle & operator=(const GaudiHandle &other)
Assignment operator for correct ref-counting.
HandleVector::const_reference const_reference
HandleVector::value_type value_type
Handle to be used in lieu of naked pointers to gaudis.
void clear() override
Clear the list of handles.
std::string getDefaultType()
Helper function to get default type string from the class type.
Define general base for Gaudi exception.
HandleVector::iterator iterator
GaudiHandleArrayBase::BaseHandleArray getBaseArray() override
Get a read-write vector of GaudiHandleBase* pointing to the real handles.
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
std::vector< const GaudiHandleBase * > ConstBaseHandleArray
auto begin(reverse_wrapper< T > &w)
const_iterator rend() const
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
HandleVector::const_reverse_iterator const_reverse_iterator
std::string getDefaultName()
GaudiHandle(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
const std::string & parentName() const
The name of the parent.
void setDefaultType()
Helper function to set default type from the class type T.
void assertObject() const
Load the pointer to the component.
std::string m_componentType
GaudiHandleArray(const std::vector< std::string > &myTypesAndNamesList, std::string myComponentType, std::string myParentName)
Generic constructor.
HandleVector::size_type size_type
GaudiHandleArray & operator=(const std::vector< std::string > &myTypesAndNamesList)
Set the array of GaudiHandles from typeAndNames given in vector of strings.
bool empty() const override
Return whether the list of tools is empty.
HandleVector::reference reference
virtual bool push_back(const T &myHandle)
StatusCode release() const
Release the component.
void setDefaultTypeAndName()
Helper function to set default name and type.
virtual std::string pythonRepr() const =0
Python representation of handle, i.e.
const T & operator[](int index) const
const std::string & propertyName() const
name as used in declareProperty(name,gaudiHandle)
HandleVector m_handleArray
StatusCode retrieve()
Retrieve all tools.
std::vector< GaudiHandleBase * > BaseHandleArray
const_iterator begin() const
auto end(reverse_wrapper< T > &w)
bool setTypesAndNames(const std::vector< std::string > &myTypesAndNamesList)
Set the array of handles from list of "type/name" strings in .
This class is used for returning status codes from appropriate routines.
GaudiHandleArrayBase::ConstBaseHandleArray getBaseArray() const override
Get a read-only vector of const GaudiHandleBase* pointing to the real handles.
StatusCode retrieve() const
Retrieve the component.
std::string m_typeAndName
HandleVector::const_iterator const_iterator
bool isValid() const
Check if the handle is valid (try to retrive the object is not done yet).
Base class of array's of various gaudihandles.
virtual std::string pythonPropertyClassName() const =0
The python class name for the property in the genconf-generated configurables.
const_iterator rbegin() const
GaudiHandleInfo(std::string myComponentType, std::string myParentName)
Some basic information and helper functions shared between various handles/arrays.
void setPropertyName(std::string propName)
set name as used in declareProperty(name,gaudiHandle).
bool isSet() const
True if the wrapped pointer is not null.
HandleVector::reverse_iterator reverse_iterator
virtual bool push_back(const std::string &myHandleTypeAndName)=0
Add a handle to the array with "type/name" given in .
virtual StatusCode release(T *comp) const
Release the component.
std::string type() const
The concrete component class name: the part before the '/'.
T & operator[](int index)
const T * operator[](const std::string &name) const
Get const pointer (!) to ToolHandle by instance name.
const_iterator end() const
Base class to handles to be used in lieu of naked pointers to various Gaudi components.
std::string typeAndName() const
The full type and name: "type/name".
GaudiHandleArrayBase(std::string myComponentType, std::string myParentName)
T * operator[](const std::string &name)
Get pointer (!) to ToolHandle by instance name.
std::ostream & operator<<(std::ostream &os, const GaudiHandleInfo &handle)
const std::string & componentType() const
std::vector< T > HandleVector
TO * reference(FROM *from)
GaudiHandleBase(std::string myTypeAndName, std::string myComponentType, std::string myParentName)
Create a handle ('smart pointer') to a gaudi component.
std::string m_propertyName
GaudiHandle(const GaudiHandle &other)
Copy constructor needed for correct ref-counting.
bool empty() const
Check if the handle has been set to empty string (i.e.
T is the concrete handle type, e.g.
StatusCode release()
Release all tools.
GaudiHandleArray(const std::string &myComponentType, const std::string &myParentName)
Constructor creating an empty array.