MTToolBox
0.2.10
総合概要
名前空間
データ構造
ファイル
ファイル一覧
大域各種
include
MTToolBox
Sequential.hpp
[詳解]
1
#ifndef MTTOOLBOX_SEQUENTIAL_HPP
2
#define MTTOOLBOX_SEQUENTIAL_HPP
3
24
#include <stdexcept>
25
#include <stdint.h>
26
#include <inttypes.h>
27
#include <
MTToolBox/AbstractGenerator.hpp
>
28
#include <
MTToolBox/util.hpp
>
29
30
namespace
MTToolBox
{
45
template
<
typename
T>
46
class
Sequential
:
public
AbstractGenerator
<T> {
47
public
:
48
58
Sequential
() {
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
*/
110
Sequential
(
Sequential<T>
& src) :
AbstractGenerator
<T>() {
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
MTToolBox::Sequential::Sequential
Sequential()
コンストラクタ
Definition:
Sequential.hpp:58
MTToolBox::AbstractGenerator
疑似乱数生成器
Definition:
AbstractGenerator.hpp:48
MTToolBox::Sequential
カウントダウン生成器
Definition:
Sequential.hpp:46
AbstractGenerator.hpp
GF(2)線形疑似乱数生成器の抽象クラス
MTToolBox::Sequential::Sequential
Sequential(T p_mask)
マスク付きコンストラクタ
Definition:
Sequential.hpp:73
MTToolBox::Sequential::generate
T generate()
内部状態を次状態に遷移し、疑似乱数をひとつ出力する。
Definition:
Sequential.hpp:164
MTToolBox::Sequential::seed
void seed(T value)
内部状態を初期化する。
Definition:
Sequential.hpp:127
MTToolBox::Sequential::bitSize
int bitSize() const
内部状態空間のビットサイズを返す。
Definition:
Sequential.hpp:217
util.hpp
ユーティリティ関数群
MTToolBox::Sequential::reseed
void reseed(T seed)
Definition:
Sequential.hpp:142
MTToolBox::Sequential::next
T next()
Definition:
Sequential.hpp:190
MTToolBox::Sequential::Sequential
Sequential(Sequential< T > &src)
Definition:
Sequential.hpp:110
MTToolBox::Sequential::Sequential
Sequential(T p_mask, T seed)
Definition:
Sequential.hpp:93
MTToolBox
MTToolBox の名前空間
2016年10月12日(水) 13時45分38秒作成 - MTToolBox / 構成:
1.8.10