The Gaudi Framework  v29r0 (ff2e7097)
ToolHandle< T > Class Template Reference

Handle to be used in lieu of naked pointers to tools. More...

#include <GaudiKernel/ToolHandle.h>

Inheritance diagram for ToolHandle< T >:
Collaboration diagram for ToolHandle< T >:

Public Member Functions

 ToolHandle (const IInterface *parent=nullptr, bool createIf=true)
 Constructor for a tool with default tool type and name. More...
 
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
 ToolHandle (const ToolHandle< NCT > &other, typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type *=nullptr)
 Copy constructor from a non const T to const T tool handle. More...
 
 ToolHandle (const std::string &toolTypeAndName, const IInterface *parent=nullptr, bool createIf=true)
 Create a handle ('smart pointer') to a tool. More...
 
template<class OWNER , typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>::type>
 ToolHandle (OWNER *owner, std::string name, std::string toolType, std::string doc="")
 Autodeclaring constructor with property name, tool type/name and documentation. More...
 
StatusCode initialize (const std::string &toolTypeAndName, const IInterface *parent=nullptr, bool createIf=true)
 
StatusCode retrieve () const
 Retrieve the AlgTool. More...
 
StatusCode release () const
 Release the AlgTool. More...
 
StatusCode retrieve (T *&algTool) const override
 Do the real retrieval of the AlgTool. More...
 
StatusCode release (T *algTool) const override
 Do the real release of the AlgTool. More...
 
std::string typeAndName () const override
 
std::add_const< T >::typeget () const
 
T * get ()
 
- Public Member Functions inherited from BaseToolHandle
StatusCode retrieve (IAlgTool *&tool) const
 
const IAlgToolget () const
 
IAlgToolget ()
 
- Public Member Functions inherited from ToolHandleInfo
virtual ~ToolHandleInfo ()=default
 
bool isPublic () const noexcept
 
bool createIf () const noexcept
 
const IInterfaceparent () const noexcept
 
- Public Member Functions inherited from GaudiHandle< T >
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
 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. More...
 
 GaudiHandle (const GaudiHandle &other)
 Copy constructor needed for correct ref-counting. More...
 
template<typename CT = T, typename NCT = typename std::remove_const<T>::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. More...
 
GaudiHandleoperator= (const GaudiHandle &other)
 Assignment operator for correct ref-counting. More...
 
StatusCode retrieve () const
 Retrieve the component. More...
 
StatusCode release () const
 Release the component. More...
 
bool isValid () const
 Check if the handle is valid (try to retrive the object is not done yet). More...
 
 operator bool () const
 For testing if handle has component. More...
 
T * get ()
 Return the wrapped pointer, not calling retrieve() if null. More...
 
std::add_const< T >::typeget () const
 Return the wrapped pointer, not calling retrieve() if null. More...
 
bool isSet () const
 True if the wrapped pointer is not null. More...
 
T & operator* ()
 
T * operator-> ()
 
std::add_const< T >::typeoperator* () const
 
std::add_const< T >::typeoperator-> () const
 
std::string getDefaultType ()
 Helper function to get default type string from the class type. More...
 
std::string getDefaultName ()
 
- Public Member Functions inherited from GaudiHandleBase
std::string typeAndName () const
 The full type and name: "type/name". More...
 
std::string type () const
 The concrete component class name: the part before the '/'. More...
 
std::string name () const
 The instance name: the part after the '/'. More...
 
bool empty () const
 Check if the handle has been set to empty string (i.e. More...
 
void setTypeAndName (std::string myTypeAndName)
 The component "type/name" string. More...
 
void setName (const std::string &myName)
 Set the instance name (part after the '/') without changing the class type. More...
 
std::string pythonPropertyClassName () const override
 Name of the componentType with "Handle" appended. More...
 
std::string messageName () const
 name used for printing messages More...
 
std::string pythonRepr () const override
 Python representation of handle, i.e. More...
 
- Public Member Functions inherited from GaudiHandleInfo
virtual ~GaudiHandleInfo ()=default
 virtual destructor so that derived class destructor is called. More...
 
const std::stringcomponentType () const
 
const std::stringpropertyName () const
 name as used in declareProperty(name,gaudiHandle) More...
 
void setPropertyName (std::string propName)
 set name as used in declareProperty(name,gaudiHandle). More...
 
const std::stringparentName () const
 The name of the parent. More...
 

Protected Member Functions

const IAlgToolgetAsIAlgTool () const override
 
IAlgToolgetAsIAlgTool () override
 
StatusCode i_retrieve (IAlgTool *&algTool) const override
 
- Protected Member Functions inherited from BaseToolHandle
 BaseToolHandle (const IInterface *parent=nullptr, bool createIf=true)
 
- Protected Member Functions inherited from ToolHandleInfo
 ToolHandleInfo (const IInterface *parent=nullptr, bool createIf=true)
 
- Protected Member Functions inherited from GaudiHandle< T >
 GaudiHandle (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
 
template<class CLASS >
std::remove_const< CLASS >::typenonConst (CLASS *p) const
 Cast a pointer to a non const type. More...
 
- Protected Member Functions inherited from GaudiHandleBase
 GaudiHandleBase (std::string myTypeAndName, std::string myComponentType, std::string myParentName)
 Create a handle ('smart pointer') to a gaudi component. More...
 
- Protected Member Functions inherited from GaudiHandleInfo
 GaudiHandleInfo (std::string myComponentType, std::string myParentName)
 Some basic information and helper functions shared between various handles/arrays. More...
 
void setComponentType (const std::string &componentType)
 The component type. More...
 
void setParentName (const std::string &parent)
 The name of the parent. More...
 

Private Attributes

ServiceHandle< IToolSvcm_pToolSvc
 

Friends

class Algorithm
 
class AlgTool
 
class Service
 

Additional Inherited Members

- Static Public Member Functions inherited from ToolHandleInfo
static std::string toolComponentType (const IInterface *parent)
 
static std::string toolParentName (const IInterface *parent)
 
- Protected Attributes inherited from ToolHandleInfo
const IInterfacem_parent = nullptr
 
bool m_createIf {true}
 

Detailed Description

template<class T>
class ToolHandle< T >

Handle to be used in lieu of naked pointers to tools.

This allows better control through the framework of tool loading and usage. T is the AlgTool interface class (or concrete class) of the tool to use, and must derive from IAlgTool.

Author
Wim Lavrijsen WLavr.nosp@m.ijse.nosp@m.n@lbl.nosp@m..gov
Marti.nosp@m.n.Wo.nosp@m.udstr.nosp@m.a@ce.nosp@m.rn.ch

Definition at line 30 of file PropertyHolder.h.

Constructor & Destructor Documentation

template<class T>
ToolHandle< T >::ToolHandle ( const IInterface parent = nullptr,
bool  createIf = true 
)
inline

Constructor for a tool with default tool type and name.

Can be called only if the type T is a concrete tool type (not an interface), and you want to use the default name.

Definition at line 112 of file ToolHandle.h.

113  : BaseToolHandle( parent, createIf )
115  , m_pToolSvc( "ToolSvc", GaudiHandleBase::parentName() )
116  {
117  }
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:157
std::string getDefaultType()
Helper function to get default type string from the class type.
Definition: GaudiHandle.h:286
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
static std::string toolParentName(const IInterface *parent)
Definition: ToolHandle.h:49
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:47
BaseToolHandle(const IInterface *parent=nullptr, bool createIf=true)
Definition: ToolHandle.h:71
static std::string toolComponentType(const IInterface *parent)
Definition: ToolHandle.h:47
bool createIf() const noexcept
Definition: ToolHandle.h:39
template<class T>
template<typename CT = T, typename NCT = typename std::remove_const<T>::type>
ToolHandle< T >::ToolHandle ( const ToolHandle< NCT > &  other,
typename std::enable_if< std::is_const< CT >::value &&!std::is_same< CT, NCT >::value >::type = nullptr 
)
inline

Copy constructor from a non const T to const T tool handle.

Definition at line 121 of file ToolHandle.h.

123  : BaseToolHandle( other.parent(), other.createIf() )
124  , GaudiHandle<CT>( other )
125  , m_pToolSvc( "ToolSvc", GaudiHandleBase::parentName() )
126  {
127  }
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:157
const IInterface * parent() const noexcept
Definition: ToolHandle.h:41
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:47
BaseToolHandle(const IInterface *parent=nullptr, bool createIf=true)
Definition: ToolHandle.h:71
bool createIf() const noexcept
Definition: ToolHandle.h:39
template<class T>
ToolHandle< T >::ToolHandle ( const std::string toolTypeAndName,
const IInterface parent = nullptr,
bool  createIf = true 
)
inline

Create a handle ('smart pointer') to a tool.

The arguments are passed on to ToolSvc, and have the same meaning:

StatusCode ToolSvc::retrieveTool ( const std::string& type ,
T*& tool ,
const IInterface* parent = 0 ,
bool createIf = true )
Parameters
ownerclass owning the ToolHandle
toolType"MyToolType/MyToolName" "MyToolType" is short for "MyToolType/MyToolType" 'MyToolType' is the name of the class of the concrete tool 'MyToolName' is to distinguish several tool instances of the same class
parentthe parent Algorithm,Tool or Service of which this tool is a member. If non-zero, the the tool is a private tool of the parent, otherwise it is a public (shared) tool.
createIfif true, create tool if not yet existing.

Definition at line 160 of file ToolHandle.h.

161  : BaseToolHandle( parent, createIf )
162  , GaudiHandle<T>( toolTypeAndName, toolComponentType( parent ), toolParentName( parent ) )
163  , m_pToolSvc( "ToolSvc", GaudiHandleBase::parentName() )
164  {
165  }
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:157
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
static std::string toolParentName(const IInterface *parent)
Definition: ToolHandle.h:49
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:47
BaseToolHandle(const IInterface *parent=nullptr, bool createIf=true)
Definition: ToolHandle.h:71
static std::string toolComponentType(const IInterface *parent)
Definition: ToolHandle.h:47
bool createIf() const noexcept
Definition: ToolHandle.h:39
template<class T>
template<class OWNER , typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>::type>
ToolHandle< T >::ToolHandle ( OWNER *  owner,
std::string  name,
std::string  toolType,
std::string  doc = "" 
)
inline

Autodeclaring constructor with property name, tool type/name and documentation.

Note
the use std::enable_if is required to avoid ambiguities

Definition at line 170 of file ToolHandle.h.

170  : ToolHandle( owner )
171  {
172  // convert name and type to a valid type/name string
173  // - if type does not contain '/' use type/name
174  // - otherwise type is already a type/name string
175  if ( !toolType.empty() and toolType.find( '/' ) == std::string::npos ) {
176  toolType += '/';
177  toolType += name;
178  }
179  owner->declareTool( *this, std::move( toolType ) ).ignore();
180  auto p = owner->OWNER::PropertyHolderImpl::declareProperty( std::move( name ), *this, std::move( doc ) );
181  p->template setOwnerType<OWNER>();
182  }
ToolHandle(const IInterface *parent=nullptr, bool createIf=true)
Constructor for a tool with default tool type and name.
Definition: ToolHandle.h:112
T empty(T...args)
T move(T...args)
T find(T...args)
std::string name() const
The instance name: the part after the &#39;/&#39;.
Definition: GaudiHandle.cpp:23

Member Function Documentation

template<class T>
std::add_const<T>::type* ToolHandle< T >::get ( ) const
inline

Definition at line 225 of file ToolHandle.h.

225 { return GaudiHandle<T>::get(); }
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:251
template<class T>
T* ToolHandle< T >::get ( )
inline

Definition at line 227 of file ToolHandle.h.

227 { return GaudiHandle<T>::get(); }
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:251
template<class T>
const IAlgTool* ToolHandle< T >::getAsIAlgTool ( ) const
inlineoverrideprotectedvirtual

Implements BaseToolHandle.

Definition at line 246 of file ToolHandle.h.

247  {
248  // const cast to support T being const
249  return GaudiHandle<T>::get();
250  }
T * get()
Return the wrapped pointer, not calling retrieve() if null.
Definition: GaudiHandle.h:251
template<class T>
IAlgTool* ToolHandle< T >::getAsIAlgTool ( )
inlineoverrideprotectedvirtual

Implements BaseToolHandle.

Definition at line 252 of file ToolHandle.h.

253  {
254  // const cast to support T being const
255  return this->nonConst( GaudiHandle<T>::get() );
256  }
Handle to be used in lieu of naked pointers to gaudis.
Definition: GaudiHandle.h:157
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
template<class T>
StatusCode ToolHandle< T >::i_retrieve ( IAlgTool *&  algTool) const
inlineoverrideprotectedvirtual

Implements BaseToolHandle.

Definition at line 258 of file ToolHandle.h.

259  {
262  }
virtual StatusCode retrieve(const std::string &type, const InterfaceID &iid, IAlgTool *&tool, const IInterface *parent=0, bool createIf=true)=0
Retrieve tool with tool dependent part of the name automatically assigned.
const IInterface * parent() const noexcept
Definition: ToolHandle.h:41
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
std::string typeAndName() const override
Definition: ToolHandle.h:223
static const InterfaceID & interfaceID()
Return an instance of InterfaceID identifying the interface.
Definition: IInterface.h:287
bool createIf() const noexcept
Definition: ToolHandle.h:39
template<class T>
StatusCode ToolHandle< T >::initialize ( const std::string toolTypeAndName,
const IInterface parent = nullptr,
bool  createIf = true 
)
inline

Definition at line 185 of file ToolHandle.h.

186  {
187 
188  GaudiHandleBase::setTypeAndName( toolTypeAndName );
191 
192  m_parent = parent;
194 
195  return m_pToolSvc.initialize( "ToolSvc", GaudiHandleBase::parentName() );
196  }
const IInterface * parent() const noexcept
Definition: ToolHandle.h:41
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
Definition: GaudiHandle.cpp:9
void setComponentType(const std::string &componentType)
The component type.
Definition: GaudiHandle.h:62
static std::string toolParentName(const IInterface *parent)
Definition: ToolHandle.h:49
const std::string & parentName() const
The name of the parent.
Definition: GaudiHandle.h:47
void setParentName(const std::string &parent)
The name of the parent.
Definition: GaudiHandle.h:65
static std::string toolComponentType(const IInterface *parent)
Definition: ToolHandle.h:47
StatusCode initialize(const std::string &serviceName, const std::string &theParentName)
Definition: ServiceHandle.h:66
const IInterface * m_parent
Definition: ToolHandle.h:56
bool createIf() const noexcept
Definition: ToolHandle.h:39
template<class T>
StatusCode ToolHandle< T >::release ( ) const
inline

Release the AlgTool.

Function must be repeated here to avoid hiding the function release( T*& )

Definition at line 207 of file ToolHandle.h.

208  { // not really const, because it updates m_pObject
209  return GaudiHandle<T>::release();
210  }
StatusCode release() const
Release the component.
Definition: GaudiHandle.h:227
template<class T>
StatusCode ToolHandle< T >::release ( T *  algTool) const
inlineoverridevirtual

Do the real release of the AlgTool.

Reimplemented from GaudiHandle< T >.

Definition at line 221 of file ToolHandle.h.

221 { return m_pToolSvc->releaseTool( this->nonConst( algTool ) ); }
std::remove_const< CLASS >::type * nonConst(CLASS *p) const
Cast a pointer to a non const type.
Definition: GaudiHandle.h:309
ServiceHandle< IToolSvc > m_pToolSvc
Definition: ToolHandle.h:268
virtual StatusCode releaseTool(IAlgTool *tool)=0
Release the tool.
template<class T>
StatusCode ToolHandle< T >::retrieve ( ) const
inline

Retrieve the AlgTool.

Release existing tool if needed. Function must be repeated here to avoid hiding the function retrieve( T*& )

Definition at line 200 of file ToolHandle.h.

201  { // not really const, because it updates m_pObject
202  return GaudiHandle<T>::retrieve();
203  }
StatusCode retrieve() const
Retrieve the component.
Definition: GaudiHandle.h:213
template<class T>
StatusCode ToolHandle< T >::retrieve ( T *&  algTool) const
inlineoverridevirtual

Do the real retrieval of the AlgTool.

Implements GaudiHandle< T >.

Definition at line 213 of file ToolHandle.h.

214  {
215  IAlgTool* iface = nullptr;
216  algTool = i_retrieve( iface ) ? dynamic_cast<T*>( iface ) : nullptr;
217  return algTool ? StatusCode::SUCCESS : StatusCode::FAILURE;
218  }
StatusCode i_retrieve(IAlgTool *&algTool) const override
Definition: ToolHandle.h:258
The interface implemented by the AlgTool base class.
Definition: IAlgTool.h:23
template<class T>
std::string ToolHandle< T >::typeAndName ( ) const
inlineoverridevirtual

Implements BaseToolHandle.

Definition at line 223 of file ToolHandle.h.

223 { return GaudiHandleBase::typeAndName(); }
std::string typeAndName() const
The full type and name: "type/name".
Definition: GaudiHandle.h:111

Friends And Related Function Documentation

template<class T>
friend class Algorithm
friend

Definition at line 104 of file ToolHandle.h.

template<class T>
friend class AlgTool
friend

Definition at line 105 of file ToolHandle.h.

template<class T>
friend class Service
friend

Definition at line 106 of file ToolHandle.h.

Member Data Documentation

template<class T>
ServiceHandle<IToolSvc> ToolHandle< T >::m_pToolSvc
mutableprivate

Definition at line 268 of file ToolHandle.h.


The documentation for this class was generated from the following files: