码迷,mamicode.com
首页 > 其他好文 > 详细

unzip.cpp.600

时间:2017-06-01 19:36:12      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:value   and   produce   rom   rate   actual   dynamic   cal   repo   

#define Z_BEST_COMPRESSION       9 #define Z_DEFAULT_COMPRESSION  (-1)

// compression strategy; see deflateInit2() for details #define Z_FILTERED            1 #define Z_HUFFMAN_ONLY        2 #define Z_DEFAULT_STRATEGY    0

// Possible values of the data_type field #define Z_BINARY   0 #define Z_ASCII    1 #define Z_UNKNOWN  2

// The deflate compression method (the only one supported in this version) #define Z_DEFLATED   8

// for initializing zalloc, zfree, opaque #define Z_NULL  0

// case sensitivity when searching for filenames #define CASE_SENSITIVE 1 #define CASE_INSENSITIVE 2

// Return codes for the compression/decompression functions. Negative // values are errors, positive values are used for special but normal events. #define Z_OK            0 #define Z_STREAM_END    1 #define Z_NEED_DICT     2 #define Z_ERRNO        (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR   (-3) #define Z_MEM_ERROR    (-4) #define Z_BUF_ERROR    (-5) #define Z_VERSION_ERROR (-6)

 

// Basic data types typedef unsigned char  Byte;  // 8 bits typedef unsigned int   uInt;  // 16 bits or more typedef unsigned long  uLong; // 32 bits or more typedef void *voidpf; typedef void     *voidp; typedef long z_off_t;

 

 

 

 

 

typedef voidpf (*alloc_func) (voidpf opaque, uInt items, uInt size); typedef void   (*free_func)  (voidpf opaque, voidpf address);

struct internal_state;

typedef struct z_stream_s {     Byte    *next_in;  // next input byte     uInt     avail_in;  // number of bytes available at next_in     uLong    total_in;  // total nb of input bytes read so far

    Byte    *next_out; // next output byte should be put there     uInt     avail_out; // remaining free space at next_out     uLong    total_out; // total nb of bytes output so far

    char     *msg;      // last error message, NULL if no error     struct internal_state *state; // not visible by applications

    alloc_func zalloc;  // used to allocate the internal state     free_func  zfree;   // used to free the internal state     voidpf     opaque;  // private data object passed to zalloc and zfree

    int     data_type;  // best guess about the data type: ascii or binary     uLong   adler;      // adler32 value of the uncompressed data     uLong   reserved;   // reserved for future use } z_stream;

typedef z_stream *z_streamp;

//   The application must update next_in and avail_in when avail_in has //   dropped to zero. It must update next_out and avail_out when avail_out //   has dropped to zero. The application must initialize zalloc, zfree and //   opaque before calling the init function. All other fields are set by the //   compression library and must not be updated by the application. // //   The opaque value provided by the application will be passed as the first //   parameter for calls of zalloc and zfree. This can be useful for custom //   memory management. The compression library attaches no meaning to the //   opaque value. // //   zalloc must return Z_NULL if there is not enough memory for the object. //   If zlib is used in a multi-threaded application, zalloc and zfree must be //   thread safe. // //   The fields total_in and total_out can be used for statistics or //   progress reports. After compression, total_in holds the total size of //   the uncompressed data and may be saved for use in the decompressor //   (particularly if the decompressor wants to decompress everything in //   a single step). //

// basic functions

const char *zlibVersion (); // The application can compare zlibVersion and ZLIB_VERSION for consistency. // If the first character differs, the library code actually used is // not compatible with the zlib.h header file used by the application. // This check is automatically made by inflateInit.

 

 

int inflate (z_streamp strm, int flush); // //    inflate decompresses as much data as possible, and stops when the input //  buffer becomes empty or the output buffer becomes full. It may some //  introduce some output latency (reading input without producing any output) //  except when forced to flush. // //  The detailed semantics are as follows. inflate performs one or both of the //  following actions: // //  - Decompress more input starting at next_in and update next_in and avail_in //    accordingly. If not all input can be processed (because there is not //    enough room in the output buffer), next_in is updated and processing //    will resume at this point for the next call of inflate(). // //  - Provide more output starting at next_out and update next_out and avail_out //    accordingly.  inflate() provides as much output as possible, until there //    is no more input data or no more space in the output buffer (see below //    about the flush parameter). // //  Before the call of inflate(), the application should ensure that at least //  one of the actions is possible, by providing more input and/or consuming //  more output, and updating the next_* and avail_* values accordingly. //  The application can consume the uncompressed output when it wants, for //  example when the output buffer is full (avail_out == 0), or after each //  call of inflate(). If inflate returns Z_OK and with zero avail_out, it //  must be called again after making room in the output buffer because there //  might be more output pending. // //    If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much //  output as possible to the output buffer. The flushing behavior of inflate is //  not specified for values of the flush parameter other than Z_SYNC_FLUSH //  and Z_FINISH, but the current implementation actually flushes as much output //  as possible anyway. // //    inflate() should normally be called until it returns Z_STREAM_END or an //  error. However if all decompression is to be performed in a single step //  (a single call of inflate), the parameter flush should be set to //  Z_FINISH. In this case all pending input is processed and all pending //  output is flushed; avail_out must be large enough to hold all the //  uncompressed data. (The size of the uncompressed data may have been saved //  by the compressor for this purpose.) The next operation on this stream must //  be inflateEnd to deallocate the decompression state. The use of Z_FINISH //  is never required, but can be used to inform inflate that a faster routine //  may be used for the single inflate() call. // //     If a preset dictionary is needed at this point (see inflateSetDictionary //  below), inflate sets strm-adler to the adler32 checksum of the //  dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise //  it sets strm->adler to the adler32 checksum of all output produced //  so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or //  an error code as described below. At the end of the stream, inflate() //  checks that its computed adler32 checksum is equal to that saved by the //  compressor and returns Z_STREAM_END only if the checksum is correct. // //    inflate() returns Z_OK if some progress has been made (more input processed //  or more output produced), Z_STREAM_END if the end of the compressed data has //  been reached and all uncompressed output has been produced, Z_NEED_DICT if a //  preset dictionary is needed at this point, Z_DATA_ERROR if the input data was //  corrupted (input stream not conforming to the zlib format or incorrect //  adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent //  (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not //  enough memory, Z_BUF_ERROR if no progress is possible or if there was not //  enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR //  case, the application may then call inflateSync to look for a good //  compression block. //

int inflateEnd (z_streamp strm); // //     All dynamically allocated data structures for this stream are freed. //   This function discards any unprocessed input and does not flush any //   pending output. // //     inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state //   was inconsistent. In the error case, msg may be set but then points to a //   static string (which must not be deallocated).

                        // Advanced functions

//  The following functions are needed only in some special applications.

 

 

int inflateSetDictionary (z_streamp strm,                                              const Byte *dictionary,                                              uInt  dictLength); // //     Initializes the decompression dictionary from the given uncompressed byte //   sequence. This function must be called immediately after a call of inflate //   if this call returned Z_NEED_DICT. The dictionary chosen by the compressor //   can be determined from the Adler32 value returned by this call of //   inflate. The compressor and decompressor must use exactly the same //   dictionary. // //     inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a //   parameter is invalid (such as NULL dictionary) or the stream state is //   inconsistent, Z_DATA_ERROR if the given dictionary doesn‘t match the //   expected one (incorrect Adler32 value). inflateSetDictionary does not //   perform any decompression: this will be done by subsequent calls of //   inflate().

int inflateSync (z_streamp strm); // //    Skips invalid compressed data until a full flush point can be found, or until all //  available input is skipped. No output is provided. // //    inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR //  if no more input was provided, Z_DATA_ERROR if no flush point has been found, //  or Z_STREAM_ERROR if the stream structure was inconsistent. In the success //  case, the application may save the current current value of total_in which //  indicates where valid compressed data was found. In the error case, the //  application may repeatedly call inflateSync, providing more input each time, //  until success or end of the input data.

int inflateReset (z_streamp strm); //     This function is equivalent to inflateEnd followed by inflateInit, //   but does not free and reallocate all the internal decompression state. //   The stream will keep attributes that may have been set by inflateInit2. // //      inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source //   stream state was inconsistent (such as zalloc or state being NULL). //

 

// checksum functions // These functions are not related to compression but are exported // anyway because they might be useful in applications using the // compression library.

uLong adler32 (uLong adler, const Byte *buf, uInt len); //     Update a running Adler-32 checksum with the bytes buf[0..len-1] and //   return the updated checksum. If buf is NULL, this function returns //   the required initial value for the checksum. //   An Adler-32 checksum is almost as reliable as a CRC32 but can be computed //   much faster. Usage example: // //     uLong adler = adler32(0L, Z_NULL, 0); // //     while (read_buffer(buffer, length) != EOF) { //       adler = adler32(adler, buffer, length); //     } //     if (adler != original_adler) error();

uLong ucrc32   (uLong crc, const Byte *buf, uInt len); //     Update a running crc with the bytes buf[0..len-1] and return the updated //   crc. If buf is NULL, this function returns the required initial value //   for the crc. Pre- and post-conditioning (one‘s complement) is performed //   within this function so it shouldn‘t be done by the application. //   Usage example: // //     uLong crc = crc32(0L, Z_NULL, 0); // //     while (read_buffer(buffer, length) != EOF) { //       crc = crc32(crc, buffer, length); //     } //     if (crc != original_crc) error();

 

const char   *zError           (int err); int           inflateSyncPoint (z_streamp z); const uLong *get_crc_table    (void);

 

typedef unsigned char  uch; typedef uch uchf; typedef unsigned short ush; typedef ush ushf; typedef unsigned long  ulg;

unzip.cpp.600

标签:value   and   produce   rom   rate   actual   dynamic   cal   repo   

原文地址:http://www.cnblogs.com/chulia20002001/p/6930306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!