The Gaudi Framework  v37r1 (a7f61348)
IInterface.h File Reference
#include "GaudiKernel/Kernel.h"
#include "GaudiKernel/StatusCode.h"
#include "GaudiKernel/System.h"
#include <ostream>
#include <type_traits>
#include <typeinfo>
#include "GaudiKernel/extend_interfaces.h"
#include "GaudiKernel/extends.h"
#include "GaudiKernel/implements.h"
Include dependency graph for IInterface.h:

Go to the source code of this file.

Classes

class  InterfaceID
 
struct  Gaudi::interface_list< I >
 
struct  Gaudi::meta::id_< T >
 
struct  Gaudi::meta::detail::inherit_from< Is >
 
struct  Gaudi::meta::detail::append1< List, I >
 
struct  Gaudi::meta::detail::append1< interface_list< Is... >, I >
 
struct  Gaudi::meta::detail::appendN< typename, typename >
 
struct  Gaudi::meta::detail::appendN< interface_list<>, State >
 
struct  Gaudi::meta::detail::appendN< interface_list< I, Is... >, List >
 
struct  Gaudi::interface_list_cat< I >
 
struct  Gaudi::interface_list_cat< interface_list< I... > >
 
struct  Gaudi::interface_list_cat< interface_list< I1... >, interface_list< I2... > >
 
struct  Gaudi::interface_list_cat< interface_list< I1... >, interface_list< I2... >, Others... >
 
struct  Gaudi::interface_list_append< I >
 
struct  Gaudi::interface_list_append< interface_list< Is... >, I >
 
struct  Gaudi::InterfaceId< INTERFACE, majVers, minVers >
 Class to handle automatically the versioning of the interfaces when they are inheriting from other interfaces. More...
 
struct  Gaudi::fullMatch_t
 
struct  Gaudi::majorMatch_t
 
class  IInterface
 

Namespaces

 Gaudi
 Header file for std:chrono::duration-based Counters.
 
 Gaudi::meta
 
 Gaudi::meta::detail
 

Macros

#define DeclareInterfaceID(iface, major, minor)
 Macro to declare the interface ID when using the new mechanism of extending and implementing interfaces. More...
 

Typedefs

template<typename... Is>
using Gaudi::meta::unique_interface_list = detail::appendN< interface_list< Is... >, interface_list<> >
 

Functions

template<typename... Is>
std::vector< std::stringGaudi::getInterfaceNames (Gaudi::interface_list< Is... >)
 
template<typename... Is, typename P >
void * Gaudi::iid_cast (const InterfaceID &tid, Gaudi::interface_list< Is... >, P *ptr)
 
template<typename TARGET >
TARGET * Gaudi::Cast (IInterface *i)
 Cast a IInterface pointer to an IInterface specialization (TARGET). More...
 
template<typename TARGET >
const TARGET * Gaudi::Cast (const IInterface *i)
 Cast a IInterface pointer to an IInterface specialization (TARGET). More...
 
template<class IFace >
bool isValidInterface (IFace *i)
 Templated function that throws an exception if the version if the interface implemented by the object behind the interface is incompatible. More...
 
std::ostreamoperator<< (std::ostream &s, const InterfaceID &id)
 ostream operator for InterfaceID. Needed by PluginSvc More...
 
template<class DEST , class SRC >
DEST ** pp_cast (SRC **ptr)
 Small function to be used instead of the construct (void**)&pointer, which produces, on gcc 4.1 optimized, the warning warning: dereferencing type-punned pointer will break strict-aliasing rules The assempler code produced is equivalent to the one with the direct cast. More...
 

Macro Definition Documentation

◆ DeclareInterfaceID

#define DeclareInterfaceID (   iface,
  major,
  minor 
)
Value:
static const InterfaceID& interfaceID() { return iid::interfaceID(); } \
using ext_iids = typename iid::iids

Macro to declare the interface ID when using the new mechanism of extending and implementing interfaces.

Definition at line 24 of file IInterface.h.

Function Documentation

◆ isValidInterface()

template<class IFace >
bool isValidInterface ( IFace *  i)

Templated function that throws an exception if the version if the interface implemented by the object behind the interface is incompatible.

This is the case if the major version differs or that the minor version of the client is bigger than of the implementer.

Note
A call to this function implies an increment of the reference count in case of success.
Author
Pere Mato

Definition at line 334 of file IInterface.h.

334  {
335  void* ii = nullptr;
336  return i->queryInterface( IFace::interfaceID(), &ii ).isSuccess();
337 }

◆ operator<<()

std::ostream& operator<< ( std::ostream s,
const InterfaceID id 
)
inline

ostream operator for InterfaceID. Needed by PluginSvc

Definition at line 341 of file IInterface.h.

341  {
342  s << "IID_" << id.id();
343  return s;
344 }

◆ pp_cast()

template<class DEST , class SRC >
DEST** pp_cast ( SRC **  ptr)
inline

Small function to be used instead of the construct (void**)&pointer, which produces, on gcc 4.1 optimized, the warning warning: dereferencing type-punned pointer will break strict-aliasing rules The assempler code produced is equivalent to the one with the direct cast.

The function can be used als to replace the construct (IInterface *&)m_MySvc. Replacement rules:

(void**)&pointerpp_cast<void>(&pointer)
(IInterface *&)m_mySvc*pp_cast<IInterface>(&m_mySvc)

Definition at line 358 of file IInterface.h.

358  {
359  return reinterpret_cast<DEST**>( ptr );
360 }
Gaudi::InterfaceId
Class to handle automatically the versioning of the interfaces when they are inheriting from other in...
Definition: IInterface.h:187
gaudirun.s
string s
Definition: gaudirun.py:348
InterfaceID
Definition: IInterface.h:39