00001
00002
00003
00004
00005
00006
00007
00008 #ifndef GAUDI_RANDOMGENSVC_RNDMGEN_H
00009 #define GAUDI_RANDOMGENSVC_RNDMGEN_H 1
00010
00011
00012 #include "GaudiKernel/IRndmGen.h"
00013
00014
00015 class IRndmEngine;
00016
00039 class RndmGen : virtual public IRndmGen {
00040
00041 private:
00043 unsigned long m_refCount;
00044
00045 protected:
00047 IRndmGen::Param* m_params;
00049 IRndmEngine* m_engine;
00050
00052 RndmGen(IInterface* engine);
00054 virtual ~RndmGen();
00055
00056 public:
00058
00059 unsigned long addRef() {
00060 return ++m_refCount;
00061 }
00062
00064 unsigned long release() {
00065 unsigned long cnt = --m_refCount;
00066 if ( cnt <= 0 ) {
00067 delete this;
00068 }
00069 return cnt;
00070 }
00072 StatusCode queryInterface(const IID& riid, void** ppvInterface);
00073
00075
00076 virtual StatusCode initialize(const IRndmGen::Param& par);
00078 virtual StatusCode finalize();
00080 virtual const IID& type() const {
00081 return (m_params != 0) ? m_params->type() : IID_IRndmFlat;
00082 }
00084 virtual const long ID() const {
00085 return long(this);
00086 }
00088 virtual const IRndmGen::Param* parameters() const {
00089 return m_params;
00090 }
00092 virtual double shoot() const;
00098 virtual StatusCode shootArray( std::vector<double>& array, long howmany, long start) const;
00099 };
00100
00101 #endif // GAUDI_RANDOMGENSVC_RNDMGEN_H