Geant4 9.6.0
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
adler32.cc
Go to the documentation of this file.
1/* adler32.c -- compute the Adler-32 checksum of a data stream
2 * Copyright (C) 1995-2003 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
4 */
5
6/* @(#) $Id: adler32.cc,v 1.1 2005-05-12 21:04:53 duns Exp $ */
7
8#define ZLIB_INTERNAL
9#include "zlib.h"
10
11#define BASE 65521UL /* largest prime smaller than 65536 */
12#define NMAX 5552
13/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
14
15#define DO1(buf,i) {s1 += buf[i]; s2 += s1;}
16#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
17#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
18#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
19#define DO16(buf) DO8(buf,0); DO8(buf,8);
20
21#ifdef NO_DIVIDE
22# define MOD(a) \
23 do { \
24 if (a >= (BASE << 16)) a -= (BASE << 16); \
25 if (a >= (BASE << 15)) a -= (BASE << 15); \
26 if (a >= (BASE << 14)) a -= (BASE << 14); \
27 if (a >= (BASE << 13)) a -= (BASE << 13); \
28 if (a >= (BASE << 12)) a -= (BASE << 12); \
29 if (a >= (BASE << 11)) a -= (BASE << 11); \
30 if (a >= (BASE << 10)) a -= (BASE << 10); \
31 if (a >= (BASE << 9)) a -= (BASE << 9); \
32 if (a >= (BASE << 8)) a -= (BASE << 8); \
33 if (a >= (BASE << 7)) a -= (BASE << 7); \
34 if (a >= (BASE << 6)) a -= (BASE << 6); \
35 if (a >= (BASE << 5)) a -= (BASE << 5); \
36 if (a >= (BASE << 4)) a -= (BASE << 4); \
37 if (a >= (BASE << 3)) a -= (BASE << 3); \
38 if (a >= (BASE << 2)) a -= (BASE << 2); \
39 if (a >= (BASE << 1)) a -= (BASE << 1); \
40 if (a >= BASE) a -= BASE; \
41 } while (0)
42#else
43# define MOD(a) a %= BASE
44#endif
45
46/* ========================================================================= */
47uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
48{
49 unsigned long s1 = adler & 0xffff;
50 unsigned long s2 = (adler >> 16) & 0xffff;
51 int k;
52
53 if (buf == Z_NULL) return 1L;
54
55 while (len > 0) {
56 k = len < NMAX ? (int)len : NMAX;
57 len -= k;
58 while (k >= 16) {
59 DO16(buf);
60 buf += 16;
61 k -= 16;
62 }
63 if (k != 0) do {
64 s1 += *buf++;
65 s2 += s1;
66 } while (--k);
67 MOD(s1);
68 MOD(s2);
69 }
70 return (s2 << 16) | s1;
71}
#define NMAX
Definition: adler32.cc:12
#define DO16(buf)
Definition: adler32.cc:19
uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len)
Definition: adler32.cc:47
#define MOD(a)
Definition: adler32.cc:43
#define ZEXPORT
Definition: zconf.h:244
unsigned int uInt
Definition: zconf.h:257
unsigned long uLong
Definition: zconf.h:258
Byte FAR Bytef
Definition: zconf.h:264
#define Z_NULL
Definition: zlib.h:180