| # Gaudi Framework, version v21r9 |

Home |  | Generated: 3 May 2010

# IInterface.h File Reference

`#include "GaudiKernel/Kernel.h"`
`#include "GaudiKernel/System.h"`
`#include "GaudiKernel/StatusCode.h"`
`#include <ostream>`
`#include <boost/mpl/set.hpp>`
`#include <boost/mpl/insert.hpp>`
`#include <boost/mpl/fold.hpp>`
`#include <boost/mpl/for_each.hpp>`
`#include <typeinfo>`
`#include "GaudiKernel/extend_interfaces.h"`
`#include "GaudiKernel/implements.h"`
`#include "GaudiKernel/extends.h"`

Include dependency graph for IInterface.h:

Go to the source code of this file.

## Namespaces
namespace | Gaudi
## Classes
class | InterfaceID
| Interface ID class. More...
class | Gaudi::InterfaceId< INTERFACE, majVers, minVers >
| Class to handle automatically the versioning of the interfaces when they are inheriting from other interfaces. More...
class | IInterface
| Definition of the basic interface. More...
## Defines
#define | DeclareInterfaceID(name, major, minor)
| Macro to declare the interface ID when using the new mechanism of extending and implementing interfaces.
#define | DeclareInterfaceIDMultiBase(name, major, minor)
| Macro to declare the interface ID when using the new mechanism of extending and implementing interfaces.
## Functions
template<typename TARGET>
TARGET * | Gaudi::Cast (IInterface *i)
| Cast a IInterface pointer to an IInterface specialization (TARGET).
template<typename TARGET>
const TARGET * | Gaudi::Cast (const IInterface *i)
| Cast a IInterface pointer to an IInterface specialization (TARGET).
template<class I>
bool | isValidInterface (I *i)
| Templated function that throws an exception if the version if the interface implemented by the object behind the interface is incompatible.
std::ostream & | operator<< (std::ostream &s, const InterfaceID &id)
| ostream operator for InterfaceID. Needed by PluginSvc
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.

## Define Documentation

#define DeclareInterfaceID | ( | name,
|  | major,
|  | minor |  | ) |

Value:

    static const InterfaceID &interfaceID(){ return iid::interfaceID(); } \
      typedef Gaudi::InterfaceId< name , major , minor > iid; \
      typedef iid::iids::type ext_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.

#define DeclareInterfaceIDMultiBase | ( | name,
|  | major,
|  | minor |  | ) |

Value:

    static const InterfaceID &interfaceID(){ return iid::interfaceID(); } \
      typedef Gaudi::InterfaceId< name , major , minor > iid

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

Definition at line 36 of file IInterface.h.

## Function Documentation

template<class I>

bool isValidInterface | ( | I * | i | ) | `[inline]`

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 258 of file IInterface.h.

    00258                              {
    00259   void* ii;
    00260   StatusCode sc =  i->queryInterface( I::interfaceID(), &ii);
    00261   return sc.isSuccess();
    00262 }

std::ostream& operator<< | ( | std::ostream & | s,
|  | const InterfaceID & | id |
| ) |  |  | `[inline]`

ostream operator for InterfaceID. Needed by PluginSvc

Definition at line 266 of file IInterface.h.

    00266                                                                        {
    00267     s << "IID_" << id.id();
    00268     return s;
    00269 }

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**)&pointer` | `pp_cast<void>(&pointer)`
`(IInterface *&)m_mySvc` | `*pp_cast<IInterface>(&m_mySvc)`

Definition at line 283 of file IInterface.h.

    00283                                 {
    00284   return reinterpret_cast<DEST**>(ptr);
    00285 }