// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.math.util;

import java.util.concurrent.ThreadLocalRandom;
import java.util.Random;

public class FastRandom extends Random
{
    private static final long multiplier = 25214903917L;
    private static final long addend = 11L;
    private static final long mask = 281474976710655L;
    private long seed;
    
    public FastRandom() {
        this.seed = initialScramble(ThreadLocalRandom.current().nextLong());
    }
    
    public FastRandom(final long seed) {
        this.seed = initialScramble(seed);
    }
    
    @Override
    public void setSeed(final long seed) {
        this.seed = initialScramble(seed);
    }
    
    private static long initialScramble(final long seed) {
        return (seed ^ 0x5DEECE66DL) & 0xFFFFFFFFFFFFL;
    }
    
    @Override
    protected int next(final int bits) {
        long seed = this.seed;
        seed = (seed * 25214903917L + 11L & 0xFFFFFFFFFFFFL);
        this.seed = seed;
        return (int)(seed >>> 48 - bits);
    }
    
    @Override
    public synchronized double nextGaussian() {
        throw new UnsupportedOperationException();
    }
}
