53 theEngine.reset( newEngine );
61 assert(
theGenerator.get() != 0 && theEngine.get() != 0 );
80#ifdef CLHEP_USE_ATOMIC
86 class ThreadSafeDefaultsCache {
89 ThreadSafeDefaultsCache();
92 ~ThreadSafeDefaultsCache();
103 DefaultsNode(DefaultsNode* iNext);
104 DefaultsNode
const* next()
const {
return next_; }
105 void setNext(DefaultsNode* v) { next_ = v; }
106 defaults* addressOfDefaults() {
return &defaults_; }
113 std::atomic<DefaultsNode*> front_;
116 ThreadSafeDefaultsCache::ThreadSafeDefaultsCache() :
120 defaults* ThreadSafeDefaultsCache::createNewDefaults() {
121 DefaultsNode* expected = front_.load();
122 DefaultsNode* newNode =
new DefaultsNode(expected);
123 while (!front_.compare_exchange_strong(expected, newNode)) {
125 newNode->setNext(expected);
127 return newNode->addressOfDefaults();
130 ThreadSafeDefaultsCache::DefaultsNode::DefaultsNode(DefaultsNode* iNext) :
135 ThreadSafeDefaultsCache::~ThreadSafeDefaultsCache() {
136 DefaultsNode
const* node = front_.load();
138 DefaultsNode
const* next = node->next();
156 static ThreadSafeDefaultsCache defaultsForAllThreads;
215 std::cerr <<
"HepRandom::engine() called -- there is no assigned engine!\n";
256 if ((index >= 0) && (index < 215)) {
257 seeds[0] = seedTable[index][0];
258 seeds[1] = seedTable[index][1];
289 os << *getTheEngine();
294 is >> *getTheEngine();
static HepRandom * getTheGenerator()
static HepRandomEngine * getTheEngine()
static const long * getTheSeeds()
virtual double operator()()
void flatArray(const int size, double *vect)
static std::ostream & saveStaticRandomStates(std::ostream &os)
static std::ostream & saveFullState(std::ostream &os)
virtual HepRandomEngine & engine()
static std::istream & restoreFullState(std::istream &is)
static void restoreEngineStatus(const char filename[]="Config.conf")
static void showEngineStatus()
virtual std::istream & get(std::istream &is)
static int createInstance()
static void setTheSeeds(const long *seeds, int aux=-1)
static void setTheSeed(long seed, int lxr=3)
virtual std::ostream & put(std::ostream &os) const
static void setTheEngine(HepRandomEngine *theNewEngine)
virtual std::string name() const
static void saveEngineStatus(const char filename[]="Config.conf")
static void getTheTableSeeds(long *seeds, int index)
static std::istream & restoreStaticRandomStates(std::istream &is)
static std::istream & restore(std::istream &is)
static std::ostream & save(std::ostream &os)
std::istream & operator>>(std::istream &is, HepRandom &dist)
static constexpr double lux
std::ostream & operator<<(std::ostream &os, const HepRandom &dist)
G4ThreadLocal IRandomGenerator * theGenerator
MixMaxRng theDefaultEngine
HepRandom theDefaultGenerator
void resetEngine(HepRandomEngine *newEngine)
std::shared_ptr< HepRandomEngine > theEngine
defaults const & operator=(defaults const &)=delete
std::shared_ptr< HepRandom > theGenerator
defaults(defaults const &other)=delete
void resetEngine(HepRandomEngine &newEngine)
#define CLHEP_THREAD_LOCAL