]>
git.saurik.com Git - wxWidgets.git/blob - src/zlib/infutil.h
   1 /* infutil.h -- types and macros common to blocks and codes 
   2  * Copyright (C) 1995-2002 Mark Adler 
   3  * For conditions of distribution and use, see copyright notice in zlib.h  
   6 /* WARNING: this file should *not* be used by applications. It is 
   7    part of the implementation of the compression library and is 
   8    subject to change. Applications should only use zlib.h. 
  15       TYPE
,     /* get type bits (3, including end bit) */ 
  16       LENS
,     /* get lengths for stored */ 
  17       STORED
,   /* processing stored block */ 
  18       TABLE
,    /* get table lengths */ 
  19       BTREE
,    /* get bit lengths tree for a dynamic block */ 
  20       DTREE
,    /* get length, distance trees for a dynamic block */ 
  21       CODES
,    /* processing fixed or dynamic block */ 
  22       DRY
,      /* output remaining window bytes */ 
  23       DONE
,     /* finished last block, done */ 
  24       BAD
}      /* got a data error--stuck here */ 
  27 /* inflate blocks semi-private state */ 
  28 struct inflate_blocks_state 
{ 
  31   inflate_block_mode  mode
;     /* current inflate_block mode */ 
  33   /* mode dependent information */ 
  35     uInt left
;          /* if STORED, bytes left to copy */ 
  37       uInt table
;               /* table lengths (14 bits) */ 
  38       uInt index
;               /* index into blens (or border) */ 
  39       uIntf 
*blens
;             /* bit lengths of codes */ 
  40       uInt bb
;                  /* bit length tree depth */ 
  41       inflate_huft 
*tb
;         /* bit length decoding tree */ 
  42     } trees
;            /* if DTREE, decoding info for trees */ 
  46     } decode
;           /* if CODES, current state */ 
  48   uInt last
;            /* true if this block is the last block */ 
  50   /* mode independent information */ 
  51   uInt bitk
;            /* bits in bit buffer */ 
  52   uLong bitb
;           /* bit buffer */ 
  53   inflate_huft 
*hufts
;  /* single malloc for tree space */ 
  54   Bytef 
*window
;        /* sliding window */ 
  55   Bytef 
*end
;           /* one byte after sliding window */ 
  56   Bytef 
*read
;          /* window read pointer */ 
  57   Bytef 
*write
;         /* window write pointer */ 
  58   check_func checkfn
;   /* check function */ 
  59   uLong check
;          /* check on output */ 
  64 /* defines for inflate input/output */ 
  65 /*   update pointers and return */ 
  66 #define UPDBITS {s->bitb=b;s->bitk=k;} 
  67 #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} 
  68 #define UPDOUT {s->write=q;} 
  69 #define UPDATE {UPDBITS UPDIN UPDOUT} 
  70 #define LEAVE {UPDATE return inflate_flush(s,z,r);} 
  71 /*   get bytes and bits */ 
  72 #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} 
  73 #define NEEDBYTE {if(n)r=Z_OK;else LEAVE} 
  74 #define NEXTBYTE (n--,*p++) 
  75 #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<<k;k+=8;}} 
  76 #define DUMPBITS(j) {b>>=(j);k-=(j);} 
  78 #define WAVAIL (uInt)(q<s->read?s->read-q-1:s->end-q) 
  79 #define LOADOUT {q=s->write;m=(uInt)WAVAIL;} 
  80 #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} 
  81 #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} 
  82 #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} 
  83 #define OUTBYTE(a) {*q++=(Byte)(a);m--;} 
  84 /*   load local pointers */ 
  85 #define LOAD {LOADIN LOADOUT} 
  87 /* masks for lower bits (size given to avoid silly warnings with Visual C++) */ 
  88 extern uInt inflate_mask
[17]; 
  90 /* copy as much as possible from the sliding window to the output area */ 
  91 extern int inflate_flush 
OF(( 
  92     inflate_blocks_statef 
*, 
  96 struct internal_state      
{int dummy
;}; /* for buggy compilers */