00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef BaseEvent_IHeader_H
00016 #define BaseEvent_IHeader_H 1
00017
00018
00019 #include "Context/TimeStamp.h"
00020 #include "GaudiKernel/boost_allocator.h"
00021 #include <vector>
00022 #include <ostream>
00023
00024
00025
00026 namespace DayaBay
00027 {
00028
00029
00030
00040 class IHeader
00041 {
00042 public:
00043
00045 typedef std::vector<IHeader*> Vector;
00046 typedef std::vector<const IHeader*> ConstVector;
00047
00048
00050 IHeader() {}
00051
00053 virtual ~IHeader() {}
00054
00056 virtual std::ostream& fillStream(std::ostream& s) const;
00057
00059 virtual const TimeStamp& timeStamp() const = 0;
00060
00062 virtual int execNumber() const = 0;
00063
00065 virtual const std::vector<unsigned long>& randomState() const = 0;
00066
00068 virtual const std::vector<const DayaBay::IHeader*>& inputHeaders() const = 0;
00069
00070
00071 #ifndef GOD_NOALLOC
00073 static void* operator new ( size_t size )
00074 {
00075 return ( sizeof(IHeader) == size ?
00076 boost::singleton_pool<IHeader, sizeof(IHeader)>::malloc() :
00077 ::operator new(size) );
00078 }
00079
00083 static void* operator new ( size_t size, void* pObj )
00084 {
00085 return ::operator new (size,pObj);
00086 }
00087
00089 static void operator delete ( void* p )
00090 {
00091 boost::singleton_pool<IHeader, sizeof(IHeader)>::is_from(p) ?
00092 boost::singleton_pool<IHeader, sizeof(IHeader)>::free(p) :
00093 ::operator delete(p);
00094 }
00095
00098 static void operator delete ( void* p, void* pObj )
00099 {
00100 ::operator delete (p, pObj);
00101 }
00102 #endif
00103 protected:
00104
00105 private:
00106
00107 };
00108
00109 inline std::ostream& operator<< (std::ostream& str, const IHeader& obj)
00110 {
00111 return obj.fillStream(str);
00112 }
00113
00114 }
00115
00116
00117
00118
00119
00120
00121
00122 inline std::ostream& DayaBay::IHeader::fillStream(std::ostream& s) const
00123 {
00124 return s;
00125 }
00126
00127
00128
00129 #endif