diff --git a/dlib/rand/rand_kernel_1.h b/dlib/rand/rand_kernel_1.h index e13519144..bb0ca79b5 100644 --- a/dlib/rand/rand_kernel_1.h +++ b/dlib/rand/rand_kernel_1.h @@ -36,18 +36,15 @@ namespace dlib rand( ) { - // prime the generator a bit - for (int i = 0; i < 10000; ++i) - mt(); + init(); + } - max_val = 0xFFFFFF; - max_val *= 0x1000000; - max_val += 0xFFFFFF; - max_val += 0.01; - - - has_gaussian = false; - next_gaussian = 0; + rand ( + const std::string& seed_value + ) + { + init(); + set_seed(seed_value); } virtual ~rand( @@ -234,6 +231,23 @@ namespace dlib ); private: + + void init() + { + // prime the generator a bit + for (int i = 0; i < 10000; ++i) + mt(); + + max_val = 0xFFFFFF; + max_val *= 0x1000000; + max_val += 0xFFFFFF; + max_val += 0.01; + + + has_gaussian = false; + next_gaussian = 0; + } + mt19937 mt; std::string seed; diff --git a/dlib/rand/rand_kernel_abstract.h b/dlib/rand/rand_kernel_abstract.h index 8ce2e8ed0..cddee5e86 100644 --- a/dlib/rand/rand_kernel_abstract.h +++ b/dlib/rand/rand_kernel_abstract.h @@ -34,6 +34,19 @@ namespace dlib - std::bad_alloc !*/ + rand ( + const std::string& seed_value + ); + /*! + ensures + - #*this is properly initialized + - #get_seed() == seed_value + - This version of the constructor is equivalent to using + the default constructor and then calling set_seed(seed_value) + throws + - std::bad_alloc + !*/ + virtual ~rand( ); /*!