public void Init(bool flag)
{
int i;
int a, b, c, d, e, f, g, h;
a = b = c = d = e = f = g = h = unchecked((int)0x9e3779b9); /* the golden ratio */
for (i = 0; i < 4; ++i)
{
a ^= b << 11; d += a; b += c;
b ^= (int)((uint)c >> 2); e += b; c += d;
c ^= d << 8; f += c; d += e;
d ^= (int)((uint)e >> 16); g += d; e += f;
e ^= f << 10; h += e; f += g;
f ^= (int)((uint)g >> 4); a += f; g += h;
g ^= h << 8; b += g; h += a;
h ^= (int)((uint)a >> 9); c += h; a += b;
}
for (i = 0; i < SIZE; i += 8)
{ /* fill in mem[] with messy stuff */
if (flag)
{
a += rsl[i]; b += rsl[i + 1]; c += rsl[i + 2]; d += rsl[i + 3];
e += rsl[i + 4]; f += rsl[i + 5]; g += rsl[i + 6]; h += rsl[i + 7];
}
a ^= b << 11; d += a; b += c;
b ^= (int)((uint)c >> 2); e += b; c += d;
c ^= d << 8; f += c; d += e;
d ^= (int)((uint)e >> 16); g += d; e += f;
e ^= f << 10; h += e; f += g;
f ^= (int)((uint)g >> 4); a += f; g += h;
g ^= h << 8; b += g; h += a;
h ^= (int)((uint)a >> 9); c += h; a += b;
mem[i] = a; mem[i + 1] = b; mem[i + 2] = c; mem[i + 3] = d;
mem[i + 4] = e; mem[i + 5] = f; mem[i + 6] = g; mem[i + 7] = h;
}
if (flag)
{ /* second pass makes all of seed affect all of mem */
for (i = 0; i < SIZE; i += 8)
{
a += mem[i]; b += mem[i + 1]; c += mem[i + 2]; d += mem[i + 3];
e += mem[i + 4]; f += mem[i + 5]; g += mem[i + 6]; h += mem[i + 7];
a ^= b << 11; d += a; b += c;
b ^= (int)((uint)c >> 2); e += b; c += d;
c ^= d << 8; f += c; d += e;
d ^= (int)((uint)e >> 16); g += d; e += f;
e ^= f << 10; h += e; f += g;
f ^= (int)((uint)g >> 4); a += f; g += h;
g ^= h << 8; b += g; h += a;
h ^= (int)((uint)a >> 9); c += h; a += b;
mem[i] = a; mem[i + 1] = b; mem[i + 2] = c; mem[i + 3] = d;
mem[i + 4] = e; mem[i + 5] = f; mem[i + 6] = g; mem[i + 7] = h;
}
}
Isaac();
count = SIZE;
}