1 #ifndef GAUDIKERNEL_TOOLHANDLE_H 2 #define GAUDIKERNEL_TOOLHANDLE_H 14 #include <type_traits> 25 using DisableTool = Gaudi::tagged_bool<class DisableTool_tag>;
26 using EnableTool = Gaudi::tagged_bool<class EnableTool_tag>;
56 return ( !parent ?
"ToolSvc" : ( pNamed ? pNamed->name() :
"" ) );
86 const IAlgTool*
get()
const {
return getAsIAlgTool(); }
97 return ( m_enabled && !typeAndName().empty() ) ||
get();
100 inline void enable() { m_enabled =
true; }
106 auto old = m_enabled;
112 virtual const IAlgTool* getAsIAlgTool()
const = 0;
114 virtual IAlgTool* getAsIAlgTool() = 0;
116 bool m_enabled =
true;
182 #if defined( TOOLHANDLE_DEPR_WARN ) 184 #pragma message( "Untracked ToolHandle: Migrate explicit DataHandle constructor to declareTool Algorithm Property" ) 198 template <class OWNER, typename = std::enable_if_t<std::is_base_of<IProperty, OWNER>::value>>
205 if ( !toolType.
empty() and toolType.
find(
'/' ) == std::string::npos ) {
206 toolType +=
'/' + toolType;
208 owner->declareTool( *
this,
std::move( toolType ) ).ignore();
209 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( propName ), *
this,
std::move( doc ) );
210 p->template setOwnerType<OWNER>();
246 if ( isEnabled() && sd ==
EnableTool{
true} ) {
265 if ( i_retrieve( iface ).isFailure() ) {
269 algTool =
dynamic_cast<T*
>( iface );
270 if ( algTool ==
nullptr ) {
271 throw GaudiException(
"unable to dcast AlgTool " + typeAndName() +
" to interface " +
288 #ifdef ALLOW_TOOLHANDLE_NONCONSTNESS 297 [[deprecated(
"FIXME!! should not call non-const method from a const ToolHandle" )]]
ToolHandle<T>& unConst()
const 356 template <class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>
::type>
363 if ( !toolType.
empty() and toolType.
find(
'/' ) == std::string::npos ) {
364 toolType +=
'/' + toolType;
366 owner->declareTool( *
this,
std::move( toolType ) ).ignore();
367 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( propName ), *
this,
std::move( doc ) );
368 p->template setOwnerType<OWNER>();
432 template <class OWNER, typename = std::enable_if_t<std::is_base_of<IProperty, OWNER>::value>>
437 owner->addToolsArray( *
this );
438 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
439 p->template setOwnerType<OWNER>();
458 template <class OWNER, typename = typename std::enable_if<std::is_base_of<IProperty, OWNER>::value>
::type>
463 owner->addToolsArray( *
this );
464 auto p = owner->OWNER::PropertyHolderImpl::declareProperty(
std::move( name ), *
this,
std::move( doc ) );
465 p->template setOwnerType<OWNER>();
470 inline std::ostream& operator<<( std::ostream& os, const ToolHandle<T>& handle )
472 return operator<<( os, static_cast<const GaudiHandleInfo&>( handle ) );
476 inline std::ostream& operator<<( std::ostream& os, const ToolHandleArray<T>& handle )
478 return operator<<( os, static_cast<const GaudiHandleInfo&>( handle ) );
481 #endif // ! GAUDIKERNEL_TOOLHANDLE_H
constexpr static const auto FAILURE
Handle to be used in lieu of naked pointers to gaudis.
Define general base for Gaudi exception.
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.
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.
constexpr static const auto SUCCESS
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.