Adler32 Class
Computes the Adler-32 checksum of RFC 1950: the checksum of zlib streams.
public static class Adler32Remarks
The implementation uses the vector instructions of the processor (AdvSimd, AVX2, SSSE3) when they are available.
The vector paths sum whole blocks of w bytes (16 or 32) in vector lanes. For a run of n bytes x0..x(n-1), RFC 1950 gives A = A0 + sum x and B = B0 + n A0 + sum (n - j) x_j. Split into blocks m = 0..k-1 of sums S_m, the weight of byte i of block m is w (k - 1 - m) + (w - i), so B = B0 + n A0 + w sum_m (S_0 + ... + S_(m-1)) + sum_m sum_i (w - i) x_(m,i): the lanes accumulate the block sums, their running prefix and the in-block weighted sums. Runs are short enough for 32-bit lanes (and for the 16-bit column sums of Adler32.UpdateAdvSimd); every path equals the byte-at-a-time reference (Adler32.UpdateScalar).
Methods
| Name | Description |
|---|---|
| Append(uint, ReadOnlySpan<byte>) | Computes the Adler-32 checksum of data that follows other data, from the checksum of the other data. |
| Compute(ReadOnlySpan<byte>) | Computes the Adler-32 checksum of data. |
Append(uint, ReadOnlySpan<byte>)
Adler32.csComputes the Adler-32 checksum of data that follows other data, from the checksum of the other data.
public static uint Append(uint checksum, ReadOnlySpan<byte> data)Parameters
checksumuint- The Adler-32 checksum of the preceding data: 1 when there is none.
dataReadOnlySpan<byte>- The data that follows.
Returns
uint The Adler-32 checksum of the preceding data followed by data.
Remarks
Append(Compute(a), b) is Compute(a + b): use it to compute the checksum of data received in several parts.
Compute(ReadOnlySpan<byte>)
Adler32.csComputes the Adler-32 checksum of data.
public static uint Compute(ReadOnlySpan<byte> data)Parameters
dataReadOnlySpan<byte>- The data.
Returns
uint The Adler-32 checksum of data; 1 when it is empty.