Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

IInterface.h

Go to the documentation of this file.
00001 // $Header: /afs/cern.ch/sw/Gaudi/cvs/GaudiKernel/GaudiKernel/IInterface.h,v 1.4 2001/02/22 17:22:14 mato Exp $
00002 #ifndef GAUDIKERNEL_IINTERFACE_H
00003 #define GAUDIKERNEL_IINTERFACE_H
00004 
00005 // Include files 
00006 
00007 #include "GaudiKernel/Kernel.h"
00008 #include "GaudiKernel/StatusCode.h"
00009 
00020 class InterfaceID {
00021 public:
00023   InterfaceID( unsigned long lid ) 
00024     : m_id( lid & 0xFFFF ), m_major_ver( (lid & 0xFF000000)>>24 ), m_minor_ver( (lid & 0xFF0000)>> 16 ) { }
00026   InterfaceID( unsigned long id, unsigned long major, unsigned long minor = 0)
00027     : m_id( id ), m_major_ver( major ), m_minor_ver( minor ) { }
00029   ~InterfaceID() { }
00031   operator unsigned long() const { return (m_major_ver << 24) + (m_minor_ver << 16) + m_id; }
00033   unsigned long id() const { return m_id; }
00035   unsigned long majorVersion() const { return m_major_ver; }
00037   unsigned long minorVersion() const { return m_minor_ver; }
00039   bool versionMatch( const InterfaceID& iid ) const { 
00040     return ( id() == iid.id() && majorVersion() == iid.majorVersion() && minorVersion() >= iid.minorVersion() );
00041   }
00043   bool fullMatch( const InterfaceID& iid ) const { 
00044     return ( id() == iid.id() && majorVersion() == iid.majorVersion() && minorVersion() == iid.minorVersion() );
00045   }
00046   bool operator == (const InterfaceID& iid ) const { return fullMatch(iid); }
00047 private:
00048   unsigned long m_id;
00049   unsigned long m_major_ver;
00050   unsigned long m_minor_ver;
00051 };
00052 
00054 typedef InterfaceID IID;
00055 
00056 // Interface ID
00057 static const InterfaceID IID_IInterface(1,0,0);
00058 
00065 class IInterface        {
00066   public:
00068   static const InterfaceID& interfaceID() { return IID_IInterface; }
00069 
00074   virtual StatusCode queryInterface(const InterfaceID& riid, void** ppvInterface) = 0;
00075 
00077   virtual unsigned long addRef() = 0;
00078 
00080   virtual unsigned long release() = 0;
00081 
00083   enum Status   {
00085     SUCCESS = 1,
00087     NO_INTERFACE,
00089     VERSMISMATCH,
00091     LAST_ERROR
00092   };
00093 };
00094 
00102 template <class I> 
00103 bool isValidInterface( I* i) {
00104   void* ii;
00105   StatusCode sc =  i->queryInterface( I::interfaceID(), &ii);
00106   return sc.isSuccess();
00107 }
00108 
00109 
00110 #endif  // GAUDIKERNEL_IINTERFACE_H

Generated on Wed Jan 23 12:58:32 2002 for Atlfast by doxygen1.2.13.1 written by Dimitri van Heesch, © 1997-2001