NCBI C++ ToolKit
ct_nlmzip_util.cpp
Go to the documentation of this file.

Go to the SVN repository for this file.

1 /* $Id: ct_nlmzip_util.cpp 94680 2021-08-30 13:02:50Z vakatov $ */
2 /*****************************************************************************
3 
4  Name: util.c ur/compr/util.c
5 
6  Description: Utility functions for compress/uncompress data
7 
8  Author: Grisha Starchenko
9  InforMax, Inc.
10  Gaithersburg, USA.
11 
12  ***************************************************************************
13 
14  PUBLIC DOMAIN NOTICE
15  National Center for Biotechnology Information
16 
17  This software/database is a "United States Government Work" under the
18  terms of the United States Copyright Act. It was written as part of
19  the author's official duties as a United States Government employee
20  and thus cannot be copyrighted. This software/database is freely
21  available to the public for use. The National Library of Medicine and
22  the U.S. Government have not placed any restriction on its use or
23  reproduction.
24 
25  Although all reasonable efforts have been taken to ensure the accuracy
26  and reliability of the software and data, the NLM and the U.S.
27  Government do not and cannot warrant the performance or results that
28  may be obtained by using this software or data. The NLM and the U.S.
29  Government disclaim all warranties, express or implied, including
30  warranties of performance, merchantability or fitness for any
31  particular purpose.
32 
33  Please cite the author in any work or product based on this material.
34 
35  ***************************************************************************
36 
37  Entry Points:
38 
39  ulg
40  Nlmzip_updcrc (s,n)
41  unsigned char *s; [ Pointer to bytes to pump through (I) ]
42  Uint4 n; [ Number of bytes in s[] (I) ]
43 
44  void
45  Nlmzip_clear_bufs (void)
46 
47  void
48  Nlmzip_flush_window (void)
49 
50  Modification History:
51  11 Aug 1995 - grisha - original written
52 
53  Bugs and restriction on use:
54 
55  Notes:
56 
57 *****************************************************************************/
58 
59 #include <ncbi_pch.hpp>
60 //#include <ctype.h>
61 //#include <errno.h>
62 //#include <string.h>
63 //#include <sys/types.h>
64 //#include <unistd.h>
65 //#include <fcntl.h>
66 //#include <stdlib.h>
67 #include "ct_nlmzip_i.h"
68 
70 
71 
72 /****************************************************************************/
73 /* LOCAL DATA */
74 /****************************************************************************/
75 
76 /* Table of CRC-32's of all single-byte values */
77 static ulg crc_32_tab[] = {
78  0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L,
79  0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L,
80  0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L,
81  0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL,
82  0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L,
83  0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L,
84  0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L,
85  0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL,
86  0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L,
87  0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL,
88  0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L,
89  0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L,
90  0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L,
91  0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL,
92  0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL,
93  0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L,
94  0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL,
95  0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L,
96  0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L,
97  0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L,
98  0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL,
99  0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L,
100  0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L,
101  0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL,
102  0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L,
103  0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L,
104  0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L,
105  0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L,
106  0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L,
107  0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL,
108  0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL,
109  0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L,
110  0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L,
111  0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL,
112  0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL,
113  0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L,
114  0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL,
115  0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L,
116  0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL,
117  0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L,
118  0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL,
119  0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L,
120  0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L,
121  0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL,
122  0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L,
123  0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L,
124  0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L,
125  0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L,
126  0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L,
127  0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L,
128  0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL,
129  0x2d02ef8dL
130 };
131 
132 /* shift register contents */
133 static ulg ulCrcVal = (ulg)0xffffffffL;
135 
136 /****************************************************************************/
137 /* GLOBAL FUNCTIONS */
138 /****************************************************************************/
139 
140 Boolean
141 Nlmzip_CrcMode ( /*FCN*/
142  Boolean bNewMode
143 ){
144  Boolean bOldMode;
145 
146  bOldMode = isGenerateCrcEnable;
147  isGenerateCrcEnable = bNewMode;
148 
149  return bOldMode;
150 }
151 
152 /****************************************************************************/
153 /*.doc Nlmzip_updcrc (external) */
154 /*+
155  Run a set of bytes through the crc shift register. If s is a NULL
156  pointer, then initialize the crc shift register contents instead.
157  Return the current crc in either case.
158 -*/
159 /****************************************************************************/
160 ulg
162  unsigned char *s, /* pointer to bytes to pump through (I) */
163  Uint4 n /* number of bytes in s[] (I) */
164 ){
165  ulg c; /* temporary variable */
166 
167  if ( isGenerateCrcEnable == FALSE ) {
168  return 0;
169  }
170 
171  if ( s == NULL ) {
172  c = 0xffffffffL;
173  } else {
174  c = ulCrcVal;
175  if ( n ) {
176  do {
177  c = crc_32_tab [
178  ((int)c ^ (*s++)) & 0xff
179  ] ^ (c >> 8);
180  } while (--n);
181  }
182  }
183  ulCrcVal = c;
184  return c ^ 0xffffffffL; /* (instead of ~c for 64-bit machines) */
185 }
186 
187 /****************************************************************************/
188 /*.doc Nlmzip_clear_bufs (external) */
189 /*+
190  Clear input and output buffers
191 -*/
192 /****************************************************************************/
193 void
194 Nlmzip_clear_bufs (void) /*FCN*/
195 {
196  Nlmzip_outcnt = 0;
197  Nlmzip_insize = 0;
198 }
199 
200 /****************************************************************************/
201 /*.doc Nlmzip_flush_window (external) */
202 /*+
203  Write the output Nlmzip_window Nlmzip_window[0..Nlmzip_outcnt-1] and update CRC.
204  Used for the decompressed data only.
205 -*/
206 /****************************************************************************/
207 void
208 Nlmzip_flush_window (void) /*FCN*/
209 {
210  if ( Nlmzip_outcnt != 0 ) { /* need to do something? */
211 
212  Nlmzip_updcrc(Nlmzip_window, Nlmzip_outcnt); /* update CRC value */
213 
214  Nlmzip_WriteData ( /* write data to output buffer */
215  Nlmzip_window, /* source */
216  Nlmzip_outcnt /* data size */
217  );
218 
219  Nlmzip_outcnt = 0; /* clear frame(Nlmzip_window) size */
220  }
221 }
222 
223 
void Nlmzip_WriteData(unsigned char *pData, int iSize)
Uint4 Nlmzip_outcnt
unsigned char Nlmzip_window[2L *0x8000]
Uint4 Nlmzip_insize
void Nlmzip_flush_window(void)
void Nlmzip_clear_bufs(void)
static ulg ulCrcVal
ulg Nlmzip_updcrc(unsigned char *s, Uint4 n)
static Boolean isGenerateCrcEnable
static BEGIN_CTRANSITION_SCOPE ulg crc_32_tab[]
#define NULL
Definition: ncbistd.hpp:225
#define BEGIN_CTRANSITION_SCOPE
Definition: ncbilcl.hpp:49
Boolean Nlmzip_CrcMode(Boolean bNewMode)
#define END_CTRANSITION_SCOPE
Definition: ncbilcl.hpp:50
uint32_t Uint4
4-byte (32-bit) unsigned integer
Definition: ncbitype.h:103
unsigned int
A callback function used to compare two keys in a database.
Definition: types.hpp:1210
yy_size_t n
Uint1 Boolean
bool replacment for C
Definition: ncbi_std.h:94
#define TRUE
bool replacment for C indicating true.
Definition: ncbi_std.h:97
#define FALSE
bool replacment for C indicating false.
Definition: ncbi_std.h:101
unsigned long ulg
Definition: zutil.h:43
Modified on Tue May 28 05:49:07 2024 by modify_doxy.py rev. 669887