RndmGenerators.cpp
Go to the documentation of this file.00001
00002 #define GAUDI_RNDMGENSVC_RNDMGENGENERATORS_CPP
00003
00004
00005 #include "GaudiKernel/SmartIF.h"
00006 #include "GaudiKernel/IRndmGen.h"
00007 #include "GaudiKernel/IRndmGenSvc.h"
00008 #include "GaudiKernel/RndmGenerators.h"
00009 #include "GaudiKernel/GaudiException.h"
00010
00011
00012 Rndm::Numbers::Numbers()
00013 : m_generator(0)
00014 {
00015 }
00016
00017
00018 Rndm::Numbers::Numbers(const Rndm::Numbers& copy )
00019 : m_generator(copy.m_generator) {
00020 if ( 0 != m_generator ) {
00021 m_generator->addRef();
00022 }
00023 }
00024
00025
00026 Rndm::Numbers::Numbers(const SmartIF<IRndmGenSvc>& svc, const IRndmGen::Param& par)
00027 : m_generator(0)
00028 {
00029 StatusCode status = initialize(svc, par);
00030 if (!status.isSuccess()) {
00031 throw GaudiException ("Initialization failed !", "Rndm::Numbers", status);
00032 }
00033 }
00034
00035
00036 Rndm::Numbers::~Numbers() {
00037 finalize().ignore();
00038 }
00039
00040
00041 StatusCode Rndm::Numbers::initialize(const SmartIF<IRndmGenSvc>& svc,
00042 const IRndmGen::Param& par) {
00043 if ( svc.isValid() && 0 == m_generator ) {
00046 return const_cast<IRndmGenSvc*>(svc.get())->generator( par, m_generator );
00047 }
00048 return StatusCode::FAILURE;
00049 }
00050
00051
00052 StatusCode Rndm::Numbers::finalize() {
00053 if ( 0 != m_generator ) {
00054 m_generator->finalize().ignore();
00055 m_generator->release();
00056 m_generator = 0;
00057 }
00058 return StatusCode::SUCCESS;
00059 }
00060
00061 #if !defined(GAUDI_V22_API) || defined(G22_NEW_SVCLOCATOR)
00062
00063 Rndm::Numbers::Numbers(IRndmGenSvc* svc, const IRndmGen::Param& par)
00064 : m_generator(0)
00065 {
00066 StatusCode status = initialize(svc, par);
00067 if (!status.isSuccess()) {
00068 throw GaudiException ("Initialization failed !", "Rndm::Numbers", status);
00069 }
00070 }
00071
00072
00073 StatusCode Rndm::Numbers::initialize(IRndmGenSvc* svc, const IRndmGen::Param& par) {
00074 return initialize(SmartIF<IRndmGenSvc>(svc), par);
00075 }
00076 #endif