OSDN Git Service

Initial commit.
[islib/islib.git] / random_number_generator.cpp
1 //
2 // Inclusion of standard header file
3 //
4 #include <cstddef>
5 #include <stdexcept>
6
7 //
8 // Inclusion of system header file
9 //
10 #include <unistd.h>
11
12 //
13 // Inclusion of local header file
14 //
15 #include "islibfunc.hpp"
16 #include "random_number_generator.hpp"
17 #include "system_error.hpp"
18
19 namespace islib
20   {
21     //
22     // Definition of static data member
23     //
24     std::size_t random_number_generator::generate_random_number_seed_calling_times = 0;
25
26     //
27     // Definition of constructor
28     //
29     random_number_generator::random_number_generator
30       (
31         random_number_seed_type const random_number_seed,
32         double const minimum_value,
33         double const maximum_value
34       ):
35       random_number_generator_implement ( random_number_generator_engine_type ( random_number_seed ), random_number_generator_distribution_type ( minimum_value, maximum_value ) )
36       {
37         class local
38           {
39           public:
40             local
41               (
42                 double const minimum_value_,
43                 double const maximum_value_
44               )
45               {
46                 throw_if ( std::invalid_argument ( "islib::random_number_generator::random_number_generator: minimum_value_ >= maximum_value_" ), minimum_value_ >= maximum_value_ );
47               }
48
49             ~local
50               ()
51               throw
52                 ()
53               {
54               }
55           }
56         a_local ( minimum_value, maximum_value );
57       }
58
59     //
60     // Definition of constructor
61     //
62     random_number_generator::random_number_generator
63       (
64         double const minimum_value,
65         double const maximum_value
66       ):
67       random_number_generator_implement ( random_number_generator_engine_type ( this_type::generate_random_number_seed () ), random_number_generator_distribution_type ( minimum_value, maximum_value ) )
68       {
69         class local
70           {
71           public:
72             local
73               (
74                 double const minimum_value_,
75                 double const maximum_value_
76               )
77               {
78                 throw_if ( std::invalid_argument ( "islib::random_number_generator::random_number_generator: minimum_value_ >= maximum_value_" ), minimum_value_ >= maximum_value_ );
79               }
80
81             ~local
82               ()
83               throw
84                 ()
85               {
86               }
87           }
88         a_local ( minimum_value, maximum_value );
89       }
90
91     //
92     // Definition of destructor
93     //
94     random_number_generator::~random_number_generator
95       ()
96       throw
97         ()
98       {
99       }
100
101     //
102     // Definition of method
103     //
104     double
105     random_number_generator::generate
106       ()
107       const
108       {
109         return random_number_generator_implement ();
110       }
111
112     //
113     // Definition of static member function
114     //
115     random_number_generator::random_number_seed_type
116     random_number_generator::generate_random_number_seed
117       ()
118       {
119         random_number_seed_type const random_number_seed = static_cast < random_number_seed_type > ( time () ) + static_cast < random_number_seed_type > ( getpid () ) + static_cast < random_number_seed_type > ( generate_random_number_seed_calling_times );
120
121         ++generate_random_number_seed_calling_times;
122
123         return random_number_seed;
124       }
125   }
126
127 //
128 // End of file
129 //