@Override protected long resumeRaw(long crc, byte[] input, int index, int length) { crc = reflect(crc); for (int i = 0; i < length; ++i) crc = table[(int) (crc ^ input[index + i]) & 0xff] ^ (crc >>> 8); return crc; } }
@Override protected StatelessHash createCacheable(CrcParameters params, EnumSet<HashSupport> required) { final int bitWidth = params.bitWidth(); if (bitWidth > 32 || (required.contains(HashSupport.LONG_SIZED) && bitWidth >= 8)) { if (required.contains(HashSupport.INT_SIZED)) throw new UnsupportedOperationException(); if (params.reflected()) return new ReflectedLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); else return new NormalLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); } else { if (params.reflected()) return new ReflectedIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); else if (bitWidth > 8) return new NormalIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); return new NormalByteCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); } } }
@Override protected StatelessHash createCacheable(CrcParameters params, EnumSet<HashSupport> required) { final int bitWidth = params.bitWidth(); if (bitWidth > 32 || (required.contains(HashSupport.LONG_SIZED) && bitWidth >= 8)) { if (required.contains(HashSupport.INT_SIZED)) throw new UnsupportedOperationException(); if (params.reflected()) return new ReflectedLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); else return new NormalLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); } else { if (params.reflected()) return new ReflectedIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); else if (bitWidth > 8) return new NormalIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); return new NormalByteCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); } } }
ReflectedLongCrc(String algorithm, int width, long poly, long init, long xorOut) { super(algorithm, width, init, xorOut); poly = reflect(poly); for (int i = 0; i < 256; ++i) { long crc = i; for (int j = 0; j < 8; ++j) crc = (crc & 1) != 0 ? (crc >>> 1) ^ poly : crc >>> 1; table[i] = crc; } }
@Override protected StatelessHash createCacheable(CrcParameters params, EnumSet<HashSupport> required) { final int bitWidth = params.bitWidth(); if (bitWidth > 32 || (required.contains(HashSupport.LONG_SIZED) && bitWidth >= 8)) { if (required.contains(HashSupport.INT_SIZED)) throw new UnsupportedOperationException(); if (params.reflected()) return new ReflectedLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); else return new NormalLongCrc(params.algorithm(), bitWidth, params.polynomial(), params.initial(), params.xorOut()); } else { if (params.reflected()) return new ReflectedIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); else if (bitWidth > 8) return new NormalIntCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); return new NormalByteCrc(params.algorithm(), bitWidth, (int) params.polynomial(), (int) params.initial(), (int) params.xorOut()); } } }
ReflectedLongCrc(String algorithm, int width, long poly, long init, long xorOut) { super(algorithm, width, init, xorOut); poly = reflect(poly); for (int i = 0; i < 256; ++i) { long crc = i; for (int j = 0; j < 8; ++j) crc = (crc & 1) != 0 ? (crc >>> 1) ^ poly : crc >>> 1; table[i] = crc; } }
ReflectedLongCrc(String algorithm, int width, long poly, long init, long xorOut) { super(algorithm, width, init, xorOut); poly = reflect(poly); for (int i = 0; i < 256; ++i) { long crc = i; for (int j = 0; j < 8; ++j) crc = (crc & 1) != 0 ? (crc >>> 1) ^ poly : crc >>> 1; table[i] = crc; } }
@Override protected long initial() { return reflect(super.initial()); }
@Override protected long initial() { return reflect(super.initial()); }