39 template <UINT32 ALPHA = (8)>
44 typedef unsigned char byte;
76 enum {
N = (1<<ALPHA)};
95 template<UINT32 ALPHA>
102 template<UINT32 ALPHA>
109 template<UINT32 ALPHA>
112 for(
int i = 0;
i <
N;
i++)
125 template<UINT32 ALPHA>
134 template<UINT32 ALPHA>
162 for(i=0; i <
N; i+=8)
164 a+=r[
i ]; b+=r[i+1]; c+=r[i+2]; d+=r[i+3];
165 e+=r[i+4]; f+=r[i+5]; g+=r[i+6]; h+=r[i+7];
169 m[
i ]=
a; m[i+1]=
b; m[i+2]=
c; m[i+3]=
d;
170 m[i+4]=
e; m[i+5]=
f; m[i+6]=
g; m[i+7]=h;
175 for(i=0; i <
N; i += 8)
177 a+=m[
i ]; b+=m[i+1]; c+=m[i+2]; d+=m[i+3];
178 e+=m[i+4]; f+=m[i+5]; g+=m[i+6]; h+=m[i+7];
182 m[
i ]=
a; m[i+1]=
b; m[i+2]=
c; m[i+3]=
d;
183 m[i+4]=
e; m[i+5]=
f; m[i+6]=
g; m[i+7]=h;
192 m[
i ]=
a; m[i+1]=
b; m[i+2]=
c; m[i+3]=
d;
193 m[i+4]=
e; m[i+5]=
f; m[i+6]=
g; m[i+7]=h;
202 template<UINT32 ALPHA>
209 template<UINT32 ALPHA>
213 a = (
a^(mix)) + *(m2++);
215 *(
r++) = b =
ind(
mm,y>>ALPHA) +
x;
219 template<UINT32 ALPHA>
226 e^=
f<<10; h+=
e;
f+=
g;
233 template<UINT32 ALPHA>
250 rngstep((a<<13), a, b, mm, m, m2, r, x, y);
251 rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
252 rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
253 rngstep((a>>16), a, b, mm, m, m2, r, x, y);
260 rngstep((a<<13), a, b, mm, m, m2, r, x, y);
261 rngstep((a>>6) , a, b, mm, m, m2, r, x, y);
262 rngstep((a<<2) , a, b, mm, m, m2, r, x, y);
263 rngstep((a>>16), a, b, mm, m, m2, r, x, y);
271 #endif // __ISAAC_HPP const UINT32 GOLDEN_RATIO
virtual void srand(UINT32 a=0, UINT32 b=0, UINT32 c=0, UINT32 *s=NULL)
virtual void randinit(randctx *ctx, bool bUseSeed)
QTIsaac(UINT32 a=0, UINT32 b=0, UINT32 c=0)
void rngstep(UINT32 mix, UINT32 &a, UINT32 &b, UINT32 *&mm, UINT32 *&m, UINT32 *&m2, UINT32 *&r, UINT32 &x, UINT32 &y)
virtual void isaac(randctx *ctx)
virtual void shuffle(UINT32 &a, UINT32 &b, UINT32 &c, UINT32 &d, UINT32 &e, UINT32 &f, UINT32 &g, UINT32 &h)
UINT32 ind(UINT32 *mm, UINT32 x)