package hex.rng; import java.util.Random; public class H2ORandomRNG extends Random { public H2ORandomRNG(long seed) { super(); if ((seed >>> 32) < 0x0000ffffL) seed |= 0x5b93000000000000L; if (((seed << 32) >>> 32) < 0x0000ffffL) seed |= 0xdb910000L; setSeed(seed); } public enum RNGKind { DETERMINISTIC("deter", "determ"), NON_DETERMINISTIC("nondeter", "non-deter", "nondeterm", "non-determ"); String[] shorcuts; private RNGKind(String... shortcuts) { this.shorcuts = shortcuts; } public static RNGKind value(String s) { RNGKind[] kinds = values(); for( RNGKind kind : kinds ) for( String ss : kind.shorcuts ) if( ss.equals(s) ) return kind; return RNGKind.valueOf(s); } } public enum RNGType { JavaRNG(RNGKind.DETERMINISTIC), MersenneTwisterRNG(RNGKind.DETERMINISTIC), XorShiftRNG(RNGKind.DETERMINISTIC), SecureRNG(RNGKind.NON_DETERMINISTIC); RNGKind kind; private RNGType(RNGKind kind) { this.kind = kind; } public RNGKind kind() { return this.kind; } } }