00001
00002
00003 #ifndef XAODROOTACCESSINTERFACES_TVIRTUALEVENT_H
00004 #define XAODROOTACCESSINTERFACES_TVIRTUALEVENT_H
00005
00006
00007 extern "C" {
00008 # include <stdint.h>
00009 }
00010
00011
00012 namespace std {
00013 class type_info;
00014 }
00015
00016 namespace xAOD {
00017
00029 class TVirtualEvent {
00030
00031 public:
00033 virtual ~TVirtualEvent() {}
00034
00036 static const uint32_t DEFAULT_KEY = 0xffffffff;
00038 static const uint32_t KEY_MASK = 0x3fffffff;
00039
00041 template< typename T >
00042 bool retrieve( const T*& obj, uint32_t key = DEFAULT_KEY,
00043 bool silent = false );
00045 template< typename T >
00046 bool retrieve( const T*& obj, const std::string& key,
00047 bool silent = false );
00048
00050 virtual uint32_t getHash( const std::string& key ) const = 0;
00052 virtual uint32_t getKey( const void* obj ) const = 0;
00054 virtual const std::string& getName( const void* obj ) const = 0;
00056 virtual const std::string& getName( uint32_t hash ) const = 0;
00057
00058 protected:
00060 virtual void* getOutputObject( uint32_t key,
00061 const std::type_info& ti ) = 0;
00063 virtual const void* getInputObject( uint32_t key,
00064 const std::type_info& ti,
00065 bool silent = false ) = 0;
00066
00067 };
00068
00069 }
00070
00071
00072 #include "TVirtualEvent.icc"
00073
00074 #endif // XAODROOTACCESSINTERFACES_TVIRTUALEVENT_H