1 #ifndef GAUDIKERNEL_GAUDIHANDLE_H 2 #define GAUDIKERNEL_GAUDIHANDLE_H 14 #include <type_traits> 21 return const_cast<std::remove_const_t<T>*
>( p );
36 : m_componentType(
std::move( myComponentType ) ), m_parentName(
std::move( myParentName ) ) {}
58 virtual std::string pythonPropertyClassName()
const = 0;
107 setTypeAndName(
std::move( myTypeAndName ) );
124 bool empty()
const {
return m_typeAndName.empty(); }
135 std::string pythonPropertyClassName()
const override;
177 m_pObject = other.
get();
194 m_pObject = other.
get();
216 if ( sc && retrieve( m_pObject ).isFailure() ) {
228 sc = release( m_pObject );
237 return m_pObject || retrieve().isSuccess();
242 operator bool()
const {
248 T*
get() {
return m_pObject; }
254 bool isSet()
const {
return get(); }
283 return ( defName.empty() ? getDefaultType() : defName );
312 throw GaudiException(
"Failed to retrieve " + componentType() +
": " + typeAndName(),
321 mutable T* m_pObject =
nullptr;
361 std::string pythonPropertyClassName()
const override;
374 virtual void clear() = 0;
377 virtual bool empty()
const = 0;
381 virtual ConstBaseHandleArray getBaseArray()
const = 0;
385 virtual BaseHandleArray getBaseArray() = 0;
388 virtual bool retrieved()
const = 0;
419 setTypesAndNames( myTypesAndNamesList );
434 setTypesAndNames( myTypesAndNamesList );
440 iterator it =
begin(), itEnd =
end();
441 for ( ; it != itEnd; ++it ) baseArray.
push_back( &*it );
447 const_iterator it =
begin(), itEnd =
end();
448 for ( ; it != itEnd; ++it ) baseArray.
push_back( &*it );
455 iterator
begin() {
return m_handleArray.begin(); }
457 iterator
end() {
return m_handleArray.end(); }
459 const_iterator
begin()
const {
return m_handleArray.begin(); }
461 const_iterator
end()
const {
return m_handleArray.end(); }
463 const_iterator
rbegin()
const {
return m_handleArray.rbegin(); }
465 const_iterator
rend()
const {
return m_handleArray.rend(); }
467 size_type
size()
const {
return m_handleArray.size(); }
469 void clear()
override { m_handleArray.clear(); }
471 bool empty()
const override {
return m_handleArray.empty(); }
475 const T&
operator[](
int index )
const {
return m_handleArray[index]; }
480 return it !=
end() ? &*it :
nullptr;
486 return it !=
end() ? &*it :
nullptr;
493 m_handleArray.push_back( myHandle );
500 for (
auto& i : *
this ) {
502 if ( i.retrieve().isFailure() ) {
507 if ( sc ) { m_retrieved =
true; }
514 for (
auto& i : *
this ) {
522 virtual bool retrieved()
const override {
return m_retrieved; }
529 bool m_retrieved{
false};
536 #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.
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
GaudiHandleArrayBase::ConstBaseHandleArray getBaseArray() const override
Get a read-only vector of const GaudiHandleBase* pointing to the real handles.
auto end(reverse_wrapper< T > &w)
std::vector< T > HandleVector
const_iterator rend() const
HandleVector::const_reverse_iterator const_reverse_iterator
void setComponentType(const std::string &componentType)
The component type.
std::string getDefaultName()
constexpr static const auto SUCCESS
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
virtual bool retrieved() const override
has Array been retreived?
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.
HandleVector::reference reference
virtual bool push_back(const T &myHandle)
void setParentName(const std::string &parent)
The name of the parent.
StatusCode release() const
Release the component.
void push_back(Container &c, const Value &v, std::true_type)
std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value, GaudiHandle & >::type operator=(const GaudiHandle< NCT > &other)
Assignment operator for correct ref-counting.
PropertyMgr & operator=(const PropertyMgr &)=delete
std::add_const< T >::type * operator->() const
void setDefaultTypeAndName()
Helper function to set default name and type.
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.
const_iterator begin() const
std::add_const< T >::type & operator*() const
std::remove_const_t< T > * nonConst(T *p)
Cast a pointer to a non const type.
This class is used for returning status codes from appropriate routines.
T * get()
Return the wrapped pointer, not calling retrieve() if null.
StatusCode retrieve() const
Retrieve the component.
std::string m_typeAndName
std::vector< const GaudiHandleBase * > ConstBaseHandleArray
bool empty() const override
Return whether the list of tools is empty.
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.
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 <myHandleTypeAndName>.
std::vector< GaudiHandleBase * > BaseHandleArray
auto begin(reverse_wrapper< T > &w)
virtual StatusCode release(T *comp) const
Release the component.
std::string type() const
The concrete component class name: the part before the '/'.
constexpr static const auto FAILURE
std::ostream & operator<<(std::ostream &os, const GaudiHandleInfo &handle)
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.
GaudiHandle(const GaudiHandle< NCT > &other, typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type *=nullptr)
Copy constructor needed for correct ref-counting.
const std::string & componentType() const
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.