/**
* Placed in public domain
* http://www.qbrundage.com/michaelb/pubs/essays/random_number_generation.html
*/
package org.apache.hadoop.hashtable;
/**
* Random number generator.
*
* @author tomasz
*
*/
public final class R250_521 {
private int r250_index;
private int r521_index;
private int[] r250_buffer = new int[250];
private int[] r521_buffer = new int[521];
public R250_521() {
java.util.Random r = new java.util.Random();
int i = 521;
int mask1 = 1;
int mask2 = 0xFFFFFFFF;
while (i-- > 250) {
r521_buffer[i] = r.nextInt();
}
while (i-- > 31) {
r250_buffer[i] = r.nextInt();
r521_buffer[i] = r.nextInt();
}
while (i-- > 0) {
r250_buffer[i] = (r.nextInt() | mask1) & mask2;
r521_buffer[i] = (r.nextInt() | mask1) & mask2;
mask2 ^= mask1;
mask1 >>= 1;
}
r250_buffer[0] = mask1;
r521_buffer[0] = mask2;
r250_index = 0;
r521_index = 0;
}
public int random() {
int i1 = r250_index;
int i2 = r521_index;
int j1 = i1 - (250 - 103);
if (j1 < 0)
j1 = i1 + 103;
int j2 = i2 - (521 - 168);
if (j2 < 0)
j2 = i2 + 168;
int r = r250_buffer[j1] ^ r250_buffer[i1];
r250_buffer[i1] = r;
int s = r521_buffer[j2] ^ r521_buffer[i2];
r521_buffer[i2] = s;
i1 = (i1 != 249) ? (i1 + 1) : 0;
r250_index = i1;
i2 = (i2 != 520) ? (i2 + 1) : 0;
r521_index = i2;
return r ^ s;
}
}