/*
Этот фрагмент исходного кода взят из:
Zlib – библиотека сжатия данных общего назначения. Версия 1.1.0
Это изменённая объектно-ориентированная версия библиотеки, полностью
совместимая с оригинальной библиотекой.
Copyright © 1995–2005 Jean-loup Gailly и Mark Adler
Copyright © 2000–2011 ymnk, JCraft, Inc.
Copyright © 2016–2017, 2019–2023 Малик Разработчик
Эта библиотека поставляется «как есть», без каких-либо явных или
подразумеваемых гарантий. Ни при каких обстоятельствах авторы не
несут какой-либо ответственности в случае потери данных вследствие
использования данной библиотеки.
Разрешается всем использовать эту библиотеку для любых целей, в том
числе и для коммерческих приложений, а также изменять её и
распространять свободно при соблюдении следующих условий:
1. Оригинал библиотеки не должен быть искажён; вы не должны
заявлять, что именно вы написали оригинальную библиотеку. Если вы
используете эту библиотеку в своём программном продукте, то ссылка
на авторов библиотеки была бы желательна, но это не является
обязательным требованием.
2. Изменённые версии исходных текстов должны быть отчётливо
маркированы и не должны выдаваться за оригинал библиотеки.
3. Эти замечания не могут быть удалены либо изменены при
каком-либо варианте распространения исходных текстов.
*/
package ru.malik.elaborarer.compression.zlib;
public final class CRC32(Checksum32, Cloneable)
{
private static final int[] TABLE;
static {
int[] table = new int[0x0100];
for(int index = 0; index < 0x0100; index++)
{
int value = index;
for(int bit = 8; bit-- > 0; ) value = (value & 1) != 0 ? 0xedb88320 ^ (value >>> 1) : value >>> 1;
table[index] = value;
}
TABLE = table;
}
public () { }
public (int value): super(value) { }
public void update(byte[] src, int offset, int length) {
int value = ~fldValue;
while(length-- > 0) value = TABLE.operator []((value ^ src[offset++]) & 0xff) ^ (value >>> 8);
fldValue = ~value;
}
public CRC32 clone() { return new CRC32(fldValue); }
}