73 lines
1.7 KiB
C#
73 lines
1.7 KiB
C#
|
namespace ComponentAce.Compression.Libs.zlib
|
||
|
{
|
||
|
internal sealed class Adler32
|
||
|
{
|
||
|
private const int BASE = 65521;
|
||
|
|
||
|
private const int NMAX = 5552;
|
||
|
|
||
|
internal long adler32(long adler, byte[] buf, int index, int len)
|
||
|
{
|
||
|
if (buf == null)
|
||
|
{
|
||
|
return 1L;
|
||
|
}
|
||
|
long num = adler & 0xFFFF;
|
||
|
long num2 = (adler >> 16) & 0xFFFF;
|
||
|
while (len > 0)
|
||
|
{
|
||
|
int num3 = ((len < 5552) ? len : 5552);
|
||
|
len -= num3;
|
||
|
while (num3 >= 16)
|
||
|
{
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
num3 -= 16;
|
||
|
}
|
||
|
if (num3 != 0)
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
num += buf[index++] & 0xFF;
|
||
|
num2 += num;
|
||
|
}
|
||
|
while (--num3 != 0);
|
||
|
}
|
||
|
num %= 65521;
|
||
|
num2 %= 65521;
|
||
|
}
|
||
|
return (num2 << 16) | num;
|
||
|
}
|
||
|
}
|
||
|
}
|