HiveNumbers.cpp
Go to the documentation of this file.
1 // Framework include files
2 #include "GaudiKernel/SmartIF.h"
3 #include "GaudiKernel/IRndmGen.h"
4 #include "GaudiKernel/IRndmGenSvc.h"
5 #include "GaudiKernel/GaudiException.h"
6 #include "HiveNumbers.h"
7 
8 namespace {
9  constexpr double HIVENUMBERS_BUFFER_SIZE=1000;
10 }
11 
13 
14 // Standard constructor
16 : m_buffer_index(0),
17  m_buffer_size(HIVENUMBERS_BUFFER_SIZE),
18  m_generator(0)
19 {
20  m_buffer.reserve(m_buffer_size);
21 }
22 
23 // Copy constructor
25 : m_buffer_index(0),
26  m_buffer_size(HIVENUMBERS_BUFFER_SIZE),
27  m_generator(copy.m_generator){
28  m_buffer.reserve(m_buffer_size);
29  if ( 0 != m_generator ) {
31  }
32 }
33 
34 // Construct and initialize the generator
36 : m_buffer_index(0),
37  m_buffer_size(HIVENUMBERS_BUFFER_SIZE),
38  m_generator(0)
39 {
40  m_buffer.reserve(m_buffer_size);
41  StatusCode status = initialize(svc, par);
42  if (!status.isSuccess()) {
43  throw GaudiException ("Initialization failed !", "HiveRndm::HiveNumbers", status);
44  }
45 }
46 
47 // Standard destructor
49  finalize().ignore();
50 }
51 
52 // Initialize the generator
54  const IRndmGen::Param& par) {
55  if ( svc.isValid() && 0 == m_generator ) {
58  return const_cast<IRndmGenSvc*>(svc.get())->generator( par, m_generator );
59  }
60  return StatusCode::FAILURE;
61 }
62 
63 // Initialize the generator
65  if ( 0 != m_generator ) {
66  m_generator->finalize().ignore();
67  m_generator->release();
68  m_generator = 0;
69  }
70  return StatusCode::SUCCESS;
71 }
72 
73 #if !defined(GAUDI_V22_API) || defined(G22_NEW_SVCLOCATOR)
74 // Construct and initialize the generator
76 : m_buffer_index(0),
77  m_buffer_size(HIVENUMBERS_BUFFER_SIZE),
78  m_generator(0)
79 {
80  StatusCode status = initialize(svc, par);
81  if (!status.isSuccess()) {
82  throw GaudiException ("Initialization failed !", "HiveRndm::HiveNumbers", status);
83  }
84 }
85 #endif
86 // Initialize the generator
88  return initialize(SmartIF<IRndmGenSvc>(svc), par);
89 }
const unsigned int m_buffer_size
Definition: HiveNumbers.h:31
virtual StatusCode finalize()
Finalization.
Definition: HiveNumbers.cpp:64
Define general base for Gaudi exception.
def initialize()
Definition: AnalysisTest.py:12
tbb::spin_rw_mutex_v3 HiveNumbersMutex
Definition: HiveNumbers.h:26
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
std::vector< double > m_buffer
Definition: HiveNumbers.h:32
TYPE * get() const
Get interface pointer.
Definition: SmartIF.h:76
IRndmGen * m_generator
Pointer to random number generator.
Definition: HiveNumbers.h:36
Random Generator service interface definition Definition of a interface for a service to access rando...
Definition: IRndmGenSvc.h:35
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual ~HiveNumbers()
Standard destructor.
Definition: HiveNumbers.cpp:48
bool isValid() const
Allow for check if smart pointer is valid.
Definition: SmartIF.h:62
virtual StatusCode initialize(const SmartIF< IRndmGenSvc > &svc, const IRndmGen::Param &par)
Initialization.
Definition: HiveNumbers.cpp:53
virtual unsigned long addRef()=0
Increment the reference count of Interface instance.
void ignore() const
Definition: StatusCode.h:108
HiveNumbers()
Standard constructor.
Definition: HiveNumbers.cpp:15
static HiveNumbersMutex m_genMutex
Definition: HiveNumbers.h:33