// Copyright (C) 2003 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #undef DLIB_RAND_KERNEl_ABSTRACT_ #ifdef DLIB_RAND_KERNEl_ABSTRACT_ #include #include "../uintn.h" namespace dlib { class rand { /*! INITIAL VALUE get_seed() == "" WHAT THIS OBJECT REPRESENTS This object represents a pseudorandom number generator. !*/ public: rand( ); /*! ensures - #*this is properly initialized throws - std::bad_alloc !*/ rand ( time_t seed_value ); /*! ensures - #*this is properly initialized - #get_seed() == cast_to_string(seed_value) - This version of the constructor is equivalent to using the default constructor and then calling set_seed(cast_to_string(seed_value)) throws - 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( ); /*! ensures - all memory associated with *this has been released !*/ void clear( ); /*! ensures - #*this has its initial value throws - std::bad_alloc if this exception is thrown then *this is unusable until clear() is called and succeeds !*/ const std::string& get_seed ( ); /*! ensures - returns the string currently being used as the random seed. !*/ void set_seed ( const std::string& value ); /*! ensures - #get_seed() == value !*/ unsigned char get_random_8bit_number ( ); /*! ensures - returns a pseudorandom number in the range 0 to 255 !*/ uint16 get_random_16bit_number ( ); /*! ensures - returns a pseudorandom number in the range 0 to 2^16-1 !*/ uint32 get_random_32bit_number ( ); /*! ensures - returns a pseudorandom number in the range 0 to 2^32-1 !*/ uint64 get_random_64bit_number ( ); /*! ensures - returns a pseudorandom number in the range 0 to 2^64-1 !*/ float get_random_float ( ); /*! ensures - returns a random float number N where: 0.0 <= N < 1.0. !*/ double get_random_double ( ); /*! ensures - returns a random double number N where: 0.0 <= N < 1.0. !*/ double get_double_in_range ( double begin, double end ); /*! requires - begin <= end ensures - if (begin < end) then - returns a random double number N where: begin <= N < end. - else - returns begin !*/ long long get_integer_in_range( long long begin, long long end ); /*! requires - begin <= end ensures - returns a random integer selected from the range: begin <= N < end The integer is selected uniformly at random. !*/ long long get_integer( long long end ); /*! requires - 0 <= end ensures - returns get_integer_in_range(0,end) !*/ double get_random_gaussian ( ); /*! ensures - returns a random number sampled from a Gaussian distribution with mean 0 and standard deviation 1. !*/ void swap ( rand& item ); /*! ensures - swaps *this and item !*/ }; inline void swap ( rand& a, rand& b ) { a.swap(b); } /*! provides a global swap function !*/ void serialize ( const rand& item, std::ostream& out ); /*! provides serialization support !*/ void deserialize ( rand& item, std::istream& in ); /*! provides deserialization support !*/ } #endif // DLIB_RAND_KERNEl_ABSTRACT_