/** {@inheritDoc} */ @Override public void setSeed(int[] seed) { if (seed == null) { setSeed(System.currentTimeMillis() + System.identityHashCode(this)); return; } final int seedLen = seed.length; final int rslLen = rsl.length; System.arraycopy(seed, 0, rsl, 0, FastMath.min(seedLen, rslLen)); if (seedLen < rslLen) { for (int j = seedLen; j < rslLen; j++) { long k = rsl[j - seedLen]; rsl[j] = (int) (0x6c078965L * (k ^ k >> 30) + j & 0xffffffffL); } } initState(); }
/** {@inheritDoc} */ @Override public void setSeed(int seed) { setSeed(new int[]{seed}); }
/** {@inheritDoc} */ @Override protected int next(int bits) { if (count < 0) { isaac(); count = SIZE - 1; } return rsl[count--] >>> 32 - bits; }
/** Intermediate internal loop. */ private void isaac2() { isaacX = mem[isaacI]; isaacA ^= isaacA << 13; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 6; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA << 2; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 16; isaacA += mem[isaacJ++]; isaac3(); }
/** * Creates a new ISAAC random number generator using a single long seed. * * @param seed Initial seed. */ public ISAACRandom(long seed) { setSeed(seed); }
/** {@inheritDoc} */ @Override protected int next(int bits) { if (count < 0) { isaac(); count = SIZE - 1; } return rsl[count--] >>> 32 - bits; }
/** Intermediate internal loop. */ private void isaac2() { isaacX = mem[isaacI]; isaacA ^= isaacA << 13; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 6; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA << 2; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 16; isaacA += mem[isaacJ++]; isaac3(); }
/** * Creates a new ISAAC random number generator using an int array seed. * * @param seed Initial seed. If {@code null}, the seed will be related * to the current time. */ public ISAACRandom(int[] seed) { setSeed(seed); }
/** {@inheritDoc} */ @Override public void setSeed(int[] seed) { if (seed == null) { setSeed(System.currentTimeMillis() + System.identityHashCode(this)); return; } final int seedLen = seed.length; final int rslLen = rsl.length; System.arraycopy(seed, 0, rsl, 0, Math.min(seedLen, rslLen)); if (seedLen < rslLen) { for (int j = seedLen; j < rslLen; j++) { long k = rsl[j - seedLen]; rsl[j] = (int) (0x6c078965L * (k ^ k >> 30) + j & 0xffffffffL); } } initState(); }
/** {@inheritDoc} */ @Override protected int next(int bits) { if (count < 0) { isaac(); count = SIZE - 1; } return rsl[count--] >>> 32 - bits; }
/** Intermediate internal loop. */ private void isaac2() { isaacX = mem[isaacI]; isaacA ^= isaacA << 13; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 6; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA << 2; isaacA += mem[isaacJ++]; isaac3(); isaacX = mem[isaacI]; isaacA ^= isaacA >>> 16; isaacA += mem[isaacJ++]; isaac3(); }
/** {@inheritDoc} */ @Override public void setSeed(long seed) { setSeed(new int[]{(int) (seed >>> 32), (int) (seed & 0xffffffffL)}); }
/** {@inheritDoc} */ @Override public void setSeed(int[] seed) { if (seed == null) { setSeed(System.currentTimeMillis() + System.identityHashCode(this)); return; } final int seedLen = seed.length; final int rslLen = rsl.length; System.arraycopy(seed, 0, rsl, 0, FastMath.min(seedLen, rslLen)); if (seedLen < rslLen) { for (int j = seedLen; j < rslLen; j++) { long k = rsl[j - seedLen]; rsl[j] = (int) (0x6c078965L * (k ^ k >> 30) + j & 0xffffffffL); } } initState(); }
/** * Creates a new ISAAC random number generator. * <br/> * The instance is initialized using a combination of the * current time and system hash code of the instance as the seed. */ public ISAACRandom() { setSeed(System.currentTimeMillis() + System.identityHashCode(this)); }