public static int hash(final CharSequence[] data) { if (data == null) return 0; int result = 0x1A976FDF, z = 0x60642E25; final int len = data.length; for (int i = 0; i < len; i++) { result ^= (z += (hash(data[i]) ^ 0xC3564E95) * 0x9E375); z ^= (result = (result << 20 | result >>> 12)); } result += (z ^ z >>> 15 ^ 0xAE932BD5) * 0x632B9; result = (result ^ result >>> 15) * 0xFF51D; result = (result ^ result >>> 15) * 0xC4CEB; return result ^ result >>> 15; }
@Override public int hashCode() { return CrossHash.hash(shorts); } }
@Override public int hashCode() { int result = CrossHash.hash(mt); result = 31 * result + mti; result = 31 * result + (int) (extra ^ (extra >>> 32)); result = 31 * result + (bitState ? 1 : 0); return result; }
@Override public int hashCode() { return CrossHash.hash(alterations); }
@Override public int hash(final Object data) { return CrossHash.hash(data); }
@Override public int hash(final Object data) { return (data instanceof float[]) ? CrossHash.hash((float[]) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof long[]) ? CrossHash.hash((long[]) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof boolean[]) ? CrossHash.hash((boolean[]) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof char[]) ? CrossHash.hash((char[]) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof double[]) ? CrossHash.hash((double[]) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof CharSequence) ? CrossHash.hash((CharSequence) data) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof CharSequence[]) ? CrossHash.hash((CharSequence[]) data) : data.hashCode(); }
@Override public int hash(Object data) { return (data instanceof char[]) ? CrossHash.hash((char[]) data, 0, ((char[]) data).length - 2) : data.hashCode(); }
@Override public int hash(final Object data) { return (data instanceof int[]) ? CrossHash.hash((int[]) data) : data.hashCode(); }
/** * Garbles text with the given keyText. This can be degarbled with {@link #degarble(String, String)}, which must be * given the same keyText. * @param text the text to garble * @param keyText used to determine the key this will use to garble text * @return a new String that appears unrelated to text and should look like gibberish */ public static String garble(final String text, final String keyText) { return garble(text,CrossHash.hash(keyText) ^ 0x7F4A7C15); }
/** * Constructs a MonsterGen with the given seed (hashing seed with CrossHash) for the default RNG. */ public MonsterGen(String seed) { srng.setState(CrossHash.hash(seed)); }
/** * Given a garbled String that was produced by {@link #garble(String, String)} (using the given keyText), this * reverses the garbling and gets the original String. * @param garbled a String produced by a garble() method using the same keyText * @param keyText the keyText that was used during garbling * @return the original String before garbling, if the keys match */ public static String degarble(final String garbled, final String keyText) { return degarble(garbled,CrossHash.hash(keyText) ^ 0x7F4A7C15); }
@Override public int hashCode() { return (155 + CrossHash.hash(name)) * 31 ^ toIntBits(); } }
/** * Hashes {@code seed} using both {@link CrossHash#hash(CharSequence)} and {@link String#hashCode()} and uses those * two results as the two states with {@link #setState(int, int)}. If seed is null, this won't call * String.hashCode() on it and will instead use 1 as that state (to avoid the forbidden double-zero case). * @param seed any String; may be null */ public GWTRNG(final String seed) { setState(CrossHash.hash(seed), seed == null ? 1 : seed.hashCode()); }