1 #ifndef GAUDIKERNEL_TOOLHANDLE_H 2 #define GAUDIKERNEL_TOOLHANDLE_H 13 #include <type_traits> 52 return ( !parent ?
"ToolSvc" : ( pNamed ? pNamed->name() :
"" ) );
80 const IAlgTool*
get()
const {
return getAsIAlgTool(); }
91 return ( m_enabled && !typeAndName().empty() ) ||
get();
94 inline void enable() { m_enabled =
true; }
96 inline void disable() { m_enabled =
false; }
100 auto old = m_enabled;
106 virtual const IAlgTool* getAsIAlgTool()
const = 0;
108 virtual IAlgTool* getAsIAlgTool() = 0;
110 bool m_enabled =
true;
176 #if defined( TOOLHANDLE_DEPR_WARN ) 178 #pragma message( "Untracked ToolHandle: Migrate explicit DataHandle constructor to declareTool Algorithm Property" ) 192 template <class OWNER, typename = std::enable_if_t<std::is_base_of<IProperty, OWNER>::value>>
198 if ( !toolType.
empty() and toolType.
find(
'/' ) == std::string::npos ) {
202 owner->declareTool( *
this,
std::move( toolType ) ).ignore();
203 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
204 p->template setOwnerType<OWNER>();
239 algTool = i_retrieve( iface ) ?
dynamic_cast<T*
>( iface ) :
nullptr;
253 #ifdef ALLOW_TOOLHANDLE_NONCONSTNESS 262 [[deprecated(
"FIXME!! should not call non-const method from a const ToolHandle" )]]
ToolHandle<T>& unConst()
const 321 template <class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>
::type>
328 if ( !toolType.
empty() and toolType.
find(
'/' ) == std::string::npos ) {
332 owner->declareTool( *
this,
std::move( toolType ) ).ignore();
333 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
334 p->template setOwnerType<OWNER>();
398 template <class OWNER, typename = std::enable_if_t<std::is_base_of<IProperty, OWNER>::value>>
403 owner->addToolsArray( *
this );
404 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
405 p->template setOwnerType<OWNER>();
424 template <class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>
::type>
429 owner->addToolsArray( *
this );
430 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
431 p->template setOwnerType<OWNER>();
436 inline std::ostream& operator<<( std::ostream& os, const ToolHandle<T>& handle )
438 return operator<<( os, static_cast<const GaudiHandleInfo&>( handle ) );
442 inline std::ostream& operator<<( std::ostream& os, const ToolHandleArray<T>& handle )
444 return operator<<( os, static_cast<const GaudiHandleInfo&>( handle ) );
447 #endif // ! GAUDIKERNEL_TOOLHANDLE_H
Handle to be used in lieu of naked pointers to gaudis.
void setTypeAndName(std::string myTypeAndName)
The component "type/name" string.
void setComponentType(const std::string &componentType)
The component type.
const std::string & parentName() const
The name of the parent.
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::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.
Definition of the basic interface.
T * get()
Return the wrapped pointer, not calling retrieve() if null.
StatusCode retrieve() const
Retrieve the component.
Base class from which all concrete algorithm classes should be derived.
IInterface compliant class extending IInterface with the name() method.
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".
Base class for all services.
static const InterfaceID & interfaceID()
Return an instance of InterfaceID identifying the interface.
T is the concrete handle type, e.g.