MTToolBox  0.2.10
Sequential.hpp
Go to the documentation of this file.
1 #ifndef MTTOOLBOX_SEQUENTIAL_HPP
2 #define MTTOOLBOX_SEQUENTIAL_HPP
3 
24 #include <stdexcept>
25 #include <stdint.h>
26 #include <inttypes.h>
28 #include <MTToolBox/util.hpp>
29 
30 namespace MTToolBox {
45  template<typename T>
46  class Sequential : public AbstractGenerator<T> {
47  public:
48 
59  }
60 
73  Sequential(T p_mask) {
74  status = static_cast<T>(-1);
75  mask = p_mask;
76  error = false;
77  }
78 
79  /*
80  *\japanese
81  * マスクとシード付きコンストラクタ
82  * @param[in] p_mask 出力の際にカウンタと排他的論理和を取るためのマスク
83  * @param[in] seed 内部カウンタの初期値
84  *\endjapanese
85  *
86  *\english
87  * Constructor with mask and seed
88  * @param[in] seed initial value of the internal counter
89  * @param[in] p_mask \b p_mask and internal counter are
90  * exclusively or-ed when output time.
91  *\endenglish
92  */
93  Sequential(T p_mask, T seed) {
94  status = seed;
95  mask = p_mask;
96  error = false;
97  }
98 
99  /*
100  *\japanese
101  * コピーコンストラクタ
102  * @param[in] src コピー元
103  *\endjapanese
104  *
105  *\english
106  * Copy Constructor
107  * @param[in] src source of copy
108  *\endenglish
109  */
111  status = src.status;
112  mask = src.mask;
113  error = src.error;
114  }
115 
116  /*
117  *\japanese
118  * 初期化
119  * @param[in] value 内部カウンタの初期値
120  *\endjapanese
121  *
122  *\english
123  * Initialization
124  * @param[in] value Initial value of the internal counter
125  *\endenglish
126  */
127  void seed(T value) {
128  reseed(value);
129  }
130 
131  /*
132  *\japanese
133  * 初期化
134  * @param[in] seed 内部カウンタの初期値
135  *\endjapanese
136  *
137  *\english
138  * Initialization
139  * @param[in] seed Initial value of the internal counter
140  *\endenglish
141  */
142  void reseed(T seed) {
143  status = seed;
144  error = false;
145  }
146 
147  /*
148  *\japanese
149  * 次の数を返す
150  *
151  * このメソッドはnext()を呼び出している。
152  * @see next()
153  * @return next value
154  *\endjapanese
155  *
156  *\english
157  * Returns next value
158  *
159  * This method calls next()
160  * @see next()
161  * @return next value
162  *\endenglish
163  */
164  T generate() {
165  return next();
166  }
167 
168  /*
169  *\japanese
170  * 次の数を返す
171  *
172  * 内部カウンタとマスクとの排他的論理和をとって返す。
173  * 返却値を決定後に、内部カウンタをひとつ減らす。
174  * @throw std::underflow_exception ゼロを返した後、さらにこのメ
175  * ソッドが呼ばれた場合
176  *\endjapanese
177  *
178  *\english
179  * Returns next value
180  *
181  * Returns exclusive or of the internal counter and
182  * mask given by constructor argument.
183  * After return value is decided, the internal counter
184  * will be decremented.
185  * @throws std::underflow_exception when this method
186  * is called after this method returns zero.
187  * @return next value
188  *\endenglish
189  */
190  T next() {
191  if (error) {
192  throw std::underflow_error("count over zero exception");
193  }
194  if (status <= 0) {
195  error = true;
196  }
197  T work = status;
198  status -= 1;
199  return work ^ mask;
200  }
201 
202  /*
203  *\japanese
204  * 内部カウンタのビットサイズを返す。
205  *
206  * AbstracutGenerator に合わせるため
207  * @return 内部カウンタのビットサイズ
208  *\endjapanese
209  *
210  *\english
211  * Returns bit size of the internal counter
212  *
213  * To fit to interface of AbstructGenerator
214  * @return bit size of internal counter
215  *\endenglish
216  */
217  int bitSize() const {
218  int r = bit_size<T>();
219  return r;
220  }
221  private:
222  T status;
223  T mask;
224  bool error;
225  };
226 }
227 
228 #endif // MTTOOLBOX_SEQUENTIAL_HPP
229 
230 
Sequential()
Constructor.
Definition: Sequential.hpp:58
pseudo random number generator.
Definition: AbstractGenerator.hpp:48
Counting down number generator.
Definition: Sequential.hpp:46
Abstract class of GF(2)-linear pseudo random number generators.
Sequential(T p_mask)
Constructor with mask.
Definition: Sequential.hpp:73
T generate()
transit current internal state to next state and output a pseudo random number.
Definition: Sequential.hpp:164
void seed(T value)
initialize internal state
Definition: Sequential.hpp:127
int bitSize() const
Return bit size of internal state, i.e dimension of GF(2)-vector space.
Definition: Sequential.hpp:217
Utility functions.
void reseed(T seed)
Definition: Sequential.hpp:142
T next()
Definition: Sequential.hpp:190
Sequential(Sequential< T > &src)
Definition: Sequential.hpp:110
Sequential(T p_mask, T seed)
Definition: Sequential.hpp:93
name space for MTToolBox