X-Git-Url: https://git.donarmstrong.com/?p=rsem.git;a=blobdiff_plain;f=sampling.h;h=8f80b72eca8d4982731d15a366100b5c68563ed3;hp=88200909d4b6e8bf13854808fa72f835ce20cdcb;hb=5d607690061273a9fca1262be1473038dc9fb3da;hpb=810375ef69e0de93188c6fa3819cfc584a32ff34 diff --git a/sampling.h b/sampling.h index 8820090..8f80b72 100644 --- a/sampling.h +++ b/sampling.h @@ -17,22 +17,31 @@ typedef boost::variate_generator gamma_generator; class engineFactory { public: + static void init() { seedEngine = new engine_type(time(NULL)); } + static void init(seedType seed) { seedEngine = new engine_type(seed); } + + static void finish() { if (seedEngine != NULL) delete seedEngine; } + static engine_type *new_engine() { seedType seed; - static engine_type seedEngine(time(NULL)); static std::set seedSet; // empty set of seeds std::set::iterator iter; do { - seed = seedEngine(); + seed = (*seedEngine)(); iter = seedSet.find(seed); } while (iter != seedSet.end()); seedSet.insert(seed); return new engine_type(seed); } + + private: + static engine_type *seedEngine; }; +engine_type* engineFactory::seedEngine = NULL; + // arr should be cumulative! // interval : [,) // random number should be in [0, arr[len - 1])