The Gaudi Framework  master (d98a2936)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Interface.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 // ============================================================================
12 #pragma once
13 // ============================================================================
14 // Include files
15 // ============================================================================
16 // STD & STL
17 // ============================================================================
18 #include <functional>
19 // ============================================================================
20 // GaudiKernel
21 // ============================================================================
22 #include <GaudiKernel/IInterface.h>
23 #include <GaudiKernel/SmartIF.h>
24 // ============================================================================
25 // GaudiPython
26 // ============================================================================
28 // ============================================================================
29 
30 namespace GaudiPython {
41  template <class TYPE>
42  struct Interface {
47  TYPE* operator()( const IInterface* in ) const {
48  return SmartIF<TYPE>( TYPE::interfaceID(), const_cast<IInterface*>( in ) );
49  }
50 
55  static TYPE* cast( const IInterface* in ) { return SmartIF<TYPE>( const_cast<IInterface*>( in ) ); }
56 
62  static TYPE* cast( const InterfaceID& iid, const IInterface* in ) {
63  return SmartIF<TYPE>( iid, const_cast<IInterface*>( in ) );
64  }
65  };
66 
67  template <>
69  typedef IInterface TYPE;
74  TYPE* operator()( const IInterface* in ) const { return SmartIF<TYPE>( const_cast<IInterface*>( in ) ); }
75 
80  static TYPE* cast( const IInterface* in ) { return SmartIF<TYPE>( const_cast<IInterface*>( in ) ); }
81 
87  static TYPE* cast( const InterfaceID& /* iid */, const IInterface* in ) {
88  return SmartIF<TYPE>( const_cast<IInterface*>( in ) );
89  }
90  };
91 
92 } // end of namespace GaudiPython
GaudiPython::Interface::cast
static TYPE * cast(const InterfaceID &iid, const IInterface *in)
the only one important method (static)
Definition: Interface.h:62
GaudiPython::Interface::cast
static TYPE * cast(const IInterface *in)
the only one important method (static)
Definition: Interface.h:55
SmartIF.h
IInterface.h
GaudiPython.h
GaudiPython::Interface< IInterface >::cast
static TYPE * cast(const InterfaceID &, const IInterface *in)
the only one important method (static)
Definition: Interface.h:87
SmartIF
Definition: IConverter.h:22
GaudiPython::Interface< IInterface >::TYPE
IInterface TYPE
Definition: Interface.h:69
GaudiPython
Namespace for all classes interfacing Gaudi to Python.
Definition: Algorithm.h:29
IInterface
Definition: IInterface.h:225
GaudiPython::Interface
Definition: Interface.h:42
GaudiPython::Interface< IInterface >::operator()
TYPE * operator()(const IInterface *in) const
the only one important method
Definition: Interface.h:74
InterfaceID
Definition: IInterface.h:38
GaudiPython::Interface< IInterface >::cast
static TYPE * cast(const IInterface *in)
the only one important method (static)
Definition: Interface.h:80
GaudiPython::Interface::operator()
TYPE * operator()(const IInterface *in) const
the only one important method
Definition: Interface.h:47