亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inffast.c

?? 許多壓縮算法都用到了ZLIP算法
?? C
字號:
/* inffast.c -- fast decoding * Copyright (C) 1995-2003 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */#include "zutil.h"#include "inftrees.h"#include "inflate.h"#include "inffast.h"#ifndef ASMINF/* Allow machine dependent optimization for post-increment or pre-increment.   Based on testing to date,   Pre-increment preferred for:   - PowerPC G3 (Adler)   - MIPS R5000 (Randers-Pehrson)   Post-increment preferred for:   - none   No measurable difference:   - Pentium III (Anderson)   - 68060 (Nikl) */#ifdef POSTINC#  define OFF 0#  define PUP(a) *(a)++#else#  define OFF 1#  define PUP(a) *++(a)#endif/*   Decode literal, length, and distance codes and write out the resulting   literal and match bytes until either not enough input or output is   available, an end-of-block is encountered, or a data error is encountered.   When large enough input and output buffers are supplied to inflate(), for   example, a 16K input buffer and a 64K output buffer, more than 95% of the   inflate execution time is spent in this routine.   Entry assumptions:        state->mode == LEN        strm->avail_in >= 6        strm->avail_out >= 258        start >= strm->avail_out        state->bits < 8   On return, state->mode is one of:        LEN -- ran out of enough output space or enough available input        TYPE -- reached end of block code, inflate() to interpret next block        BAD -- error in block data   Notes:    - The maximum input bits used by a length/distance pair is 15 bits for the      length code, 5 bits for the length extra, 15 bits for the distance code,      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.      Therefore if strm->avail_in >= 6, then there is enough input to avoid      checking for available input while decoding.    - The maximum bytes that a single length/distance pair can output is 258      bytes, which is the maximum length that can be coded.  inflate_fast()      requires strm->avail_out >= 258 for each loop to avoid checking for      output space. */void inflate_fast(strm, start)z_streamp strm;unsigned start;         /* inflate()'s starting value for strm->avail_out */{    struct inflate_state FAR *state;    unsigned char FAR *in;      /* local strm->next_in */    unsigned char FAR *last;    /* while in < last, enough input available */    unsigned char FAR *out;     /* local strm->next_out */    unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */    unsigned char FAR *end;     /* while out < end, enough space available */    unsigned wsize;             /* window size or zero if not using window */    unsigned whave;             /* valid bytes in the window */    unsigned write;             /* window write index */    unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */    unsigned long hold;         /* local strm->hold */    unsigned bits;              /* local strm->bits */    code const FAR *lcode;      /* local strm->lencode */    code const FAR *dcode;      /* local strm->distcode */    unsigned lmask;             /* mask for first level of length codes */    unsigned dmask;             /* mask for first level of distance codes */    code this;                  /* retrieved table entry */    unsigned op;                /* code bits, operation, extra bits, or */                                /*  window position, window bytes to copy */    unsigned len;               /* match length, unused bytes */    unsigned dist;              /* match distance */    unsigned char FAR *from;    /* where to copy match from */    /* copy state to local variables */    state = (struct inflate_state FAR *)strm->state;    in = strm->next_in - OFF;    last = in + (strm->avail_in - 5);    out = strm->next_out - OFF;    beg = out - (start - strm->avail_out);    end = out + (strm->avail_out - 257);    wsize = state->wsize;    whave = state->whave;    write = state->write;    window = state->window;    hold = state->hold;    bits = state->bits;    lcode = state->lencode;    dcode = state->distcode;    lmask = (1U << state->lenbits) - 1;    dmask = (1U << state->distbits) - 1;    /* decode literals and length/distances until end-of-block or not enough       input data or output space */    do {        if (bits < 15) {            hold += (unsigned long)(PUP(in)) << bits;            bits += 8;            hold += (unsigned long)(PUP(in)) << bits;            bits += 8;        }        this = lcode[hold & lmask];      dolen:        op = (unsigned)(this.bits);        hold >>= op;        bits -= op;        op = (unsigned)(this.op);        if (op == 0) {                          /* literal */            Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?                    "inflate:         literal '%c'\n" :                    "inflate:         literal 0x%02x\n", this.val));            PUP(out) = (unsigned char)(this.val);        }        else if (op & 16) {                     /* length base */            len = (unsigned)(this.val);            op &= 15;                           /* number of extra bits */            if (op) {                if (bits < op) {                    hold += (unsigned long)(PUP(in)) << bits;                    bits += 8;                }                len += (unsigned)hold & ((1U << op) - 1);                hold >>= op;                bits -= op;            }            Tracevv((stderr, "inflate:         length %u\n", len));            if (bits < 15) {                hold += (unsigned long)(PUP(in)) << bits;                bits += 8;                hold += (unsigned long)(PUP(in)) << bits;                bits += 8;            }            this = dcode[hold & dmask];          dodist:            op = (unsigned)(this.bits);            hold >>= op;            bits -= op;            op = (unsigned)(this.op);            if (op & 16) {                      /* distance base */                dist = (unsigned)(this.val);                op &= 15;                       /* number of extra bits */                if (bits < op) {                    hold += (unsigned long)(PUP(in)) << bits;                    bits += 8;                    if (bits < op) {                        hold += (unsigned long)(PUP(in)) << bits;                        bits += 8;                    }                }                dist += (unsigned)hold & ((1U << op) - 1);                hold >>= op;                bits -= op;                Tracevv((stderr, "inflate:         distance %u\n", dist));                op = (unsigned)(out - beg);     /* max distance in output */                if (dist > op) {                /* see if copy from window */                    op = dist - op;             /* distance back in window */                    if (op > whave) {                        strm->msg = (char *)"invalid distance too far back";                        state->mode = BAD;                        break;                    }                    from = window - OFF;                    if (write == 0) {           /* very common case */                        from += wsize - op;                        if (op < len) {         /* some from window */                            len -= op;                            do {                                PUP(out) = PUP(from);                            } while (--op);                            from = out - dist;  /* rest from output */                        }                    }                    else if (write < op) {      /* wrap around window */                        from += wsize + write - op;                        op -= write;                        if (op < len) {         /* some from end of window */                            len -= op;                            do {                                PUP(out) = PUP(from);                            } while (--op);                            from = window - OFF;                            if (write < len) {  /* some from start of window */                                op = write;                                len -= op;                                do {                                    PUP(out) = PUP(from);                                } while (--op);                                from = out - dist;      /* rest from output */                            }                        }                    }                    else {                      /* contiguous in window */                        from += write - op;                        if (op < len) {         /* some from window */                            len -= op;                            do {                                PUP(out) = PUP(from);                            } while (--op);                            from = out - dist;  /* rest from output */                        }                    }                    while (len > 2) {                        PUP(out) = PUP(from);                        PUP(out) = PUP(from);                        PUP(out) = PUP(from);                        len -= 3;                    }                    if (len) {                        PUP(out) = PUP(from);                        if (len > 1)                            PUP(out) = PUP(from);                    }                }                else {                    from = out - dist;          /* copy direct from output */                    do {                        /* minimum length is three */                        PUP(out) = PUP(from);                        PUP(out) = PUP(from);                        PUP(out) = PUP(from);                        len -= 3;                    } while (len > 2);                    if (len) {                        PUP(out) = PUP(from);                        if (len > 1)                            PUP(out) = PUP(from);                    }                }            }            else if ((op & 64) == 0) {          /* 2nd level distance code */                this = dcode[this.val + (hold & ((1U << op) - 1))];                goto dodist;            }            else {                strm->msg = (char *)"invalid distance code";                state->mode = BAD;                break;            }        }        else if ((op & 64) == 0) {              /* 2nd level length code */            this = lcode[this.val + (hold & ((1U << op) - 1))];            goto dolen;        }        else if (op & 32) {                     /* end-of-block */            Tracevv((stderr, "inflate:         end of block\n"));            state->mode = TYPE;            break;        }        else {            strm->msg = (char *)"invalid literal/length code";            state->mode = BAD;            break;        }    } while (in < last && out < end);    /* return unused bytes (on entry, bits < 8, so in won't go too far back) */    len = bits >> 3;    in -= len;    bits -= len << 3;    hold &= (1U << bits) - 1;    /* update state and return */    strm->next_in = in + OFF;    strm->next_out = out + OFF;    strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));    strm->avail_out = (unsigned)(out < end ?                                 257 + (end - out) : 257 - (out - end));    state->hold = hold;    state->bits = bits;    return;}/*   inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):   - Using bit fields for code structure   - Different op definition to avoid & for extra bits (do & for table bits)   - Three separate decoding do-loops for direct, window, and write == 0   - Special case for distance > 1 copies to do overlapped load and store copy   - Explicit branch predictions (based on measured branch probabilities)   - Deferring match copy and interspersed it with decoding subsequent codes   - Swapping literal/length else   - Swapping window/direct else   - Larger unrolled copy loops (three is about right)   - Moving len -= 3 statement into middle of loop */#endif /* !ASMINF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人激情开心网| 欧美日韩精品一区二区在线播放| 91网站最新地址| 欧美一二三区精品| 亚洲视频一区二区免费在线观看| 日韩极品在线观看| 在线观看欧美日本| 亚洲欧洲成人自拍| 国产高清成人在线| 欧美mv日韩mv国产网站app| 一区二区成人在线| 成人app软件下载大全免费| 精品处破学生在线二十三| 亚洲成a人片在线观看中文| 91在线视频在线| 国产精品三级电影| 国产成人亚洲综合a∨婷婷 | 欧美成人精精品一区二区频| 亚洲色图欧美偷拍| zzijzzij亚洲日本少妇熟睡| 2021中文字幕一区亚洲| 麻豆精品一区二区三区| 欧美性videosxxxxx| 一区二区三区四区蜜桃| 91免费视频网址| 亚洲女同一区二区| 色狠狠综合天天综合综合| 亚洲色图19p| 99在线精品一区二区三区| 中文字幕中文字幕在线一区| 成人a级免费电影| 国产精品国产三级国产aⅴ入口| 成人av免费在线播放| 欧美国产丝袜视频| 91亚洲精品久久久蜜桃网站 | 一区二区三区在线观看网站| 99精品视频一区二区| 中文字幕在线一区免费| 99久久精品国产导航| 亚洲女同一区二区| 欧美吻胸吃奶大尺度电影| 亚欧色一区w666天堂| 91精品黄色片免费大全| 久久精品国产免费| 久久久777精品电影网影网| 成人亚洲一区二区一| 亚洲欧美日韩综合aⅴ视频| 欧美三级日韩三级| 美国十次了思思久久精品导航| 亚洲精品一区二区三区99| 高清国产一区二区| 亚洲色图.com| 欧美一区中文字幕| 国产精品一区二区男女羞羞无遮挡 | 日韩三级伦理片妻子的秘密按摩| 免费精品99久久国产综合精品| 久久女同精品一区二区| www.色精品| 日产国产欧美视频一区精品| www久久精品| 色美美综合视频| 激情图片小说一区| 自拍偷自拍亚洲精品播放| 欧美剧情电影在线观看完整版免费励志电影 | 91国偷自产一区二区三区观看| 日韩一区精品字幕| 国产精品无遮挡| 欧美日本在线观看| 成人精品高清在线| 天堂在线亚洲视频| 国产精品高清亚洲| 欧美一区二区大片| 91在线码无精品| 国产在线国偷精品产拍免费yy| 亚洲免费伊人电影| 国产欧美日韩另类一区| 欧美日韩一区二区在线观看视频| 久久99精品国产麻豆婷婷洗澡| 成人欧美一区二区三区| 欧美大胆人体bbbb| 91久久人澡人人添人人爽欧美| 国产在线国偷精品免费看| 亚洲第一综合色| 亚洲男人的天堂av| 国产日韩v精品一区二区| 91.com在线观看| 色嗨嗨av一区二区三区| 成人夜色视频网站在线观看| 免费看欧美美女黄的网站| 亚洲桃色在线一区| 久久久久久久精| 欧美一级在线观看| 欧美精品在线观看播放| 色呦呦网站一区| 99精品久久免费看蜜臀剧情介绍| 精品一区二区三区不卡| 五月婷婷激情综合网| 一区二区三区小说| 中文字幕一区二区在线观看| 久久这里只精品最新地址| 日韩欧美国产电影| 欧美二区三区的天堂| 在线观看日韩毛片| 色婷婷av久久久久久久| 色婷婷久久久综合中文字幕| 成人av免费观看| 成人免费看黄yyy456| 国产成人精品免费| 国产成人夜色高潮福利影视| 韩国女主播一区二区三区| 久久精品国产99| 久久精品99国产精品| 久久99精品国产91久久来源 | 亚洲色图欧美偷拍| 亚洲图片另类小说| 樱花草国产18久久久久| 亚洲欧美国产三级| 亚洲香蕉伊在人在线观| 亚洲不卡一区二区三区| 五月天视频一区| 麻豆免费精品视频| 国产一区二区在线视频| 成人三级伦理片| 91片在线免费观看| 欧美日韩免费不卡视频一区二区三区| 欧美亚洲高清一区| 欧美一区二区三区系列电影| 91精品国产综合久久婷婷香蕉 | 三级在线观看一区二区| 日韩高清电影一区| 蜜臀av性久久久久蜜臀aⅴ流畅| 麻豆极品一区二区三区| 国产成人夜色高潮福利影视| 成人精品在线视频观看| 色婷婷av一区二区三区大白胸| 欧美日韩国产三级| 2020国产精品自拍| 日韩美女啊v在线免费观看| 亚洲一区二区三区自拍| 麻豆成人91精品二区三区| 国产电影一区在线| 欧美午夜精品久久久| 日韩免费高清电影| 国产精品久久久久久久久免费相片| 亚洲精品成a人| 九色porny丨国产精品| 99久久99久久免费精品蜜臀| 精品视频色一区| 久久久久久免费毛片精品| 亚洲人成网站色在线观看| 免费在线观看一区| 成人18视频在线播放| 欧美日韩国产综合视频在线观看| 久久夜色精品一区| 一区二区三区四区高清精品免费观看 | 国产午夜一区二区三区| 一区av在线播放| 国产乱子伦视频一区二区三区 | 欧美日韩国产高清一区二区| 久久久99精品免费观看不卡| 亚洲成国产人片在线观看| 国产成人av自拍| 91精品蜜臀在线一区尤物| 中文字幕一区二区三区乱码在线| 日一区二区三区| 色综合天天综合网天天狠天天| 欧美大尺度电影在线| 午夜视频在线观看一区二区| 成人免费精品视频| 久久一夜天堂av一区二区三区| 亚洲一区免费视频| 成人精品视频一区二区三区尤物| 日韩一区二区三区精品视频| 一区二区三区成人| 成人性生交大合| 久久久亚洲精华液精华液精华液| 午夜精品久久一牛影视| 99久久99久久精品国产片果冻| 日韩欧美国产1| 日韩国产欧美在线播放| 在线观看日韩国产| 亚洲精品日韩综合观看成人91| 国产成人在线视频免费播放| 精品理论电影在线观看| 日本欧美在线看| 5月丁香婷婷综合| 亚洲成人av一区二区三区| 色狠狠综合天天综合综合| 亚洲视频中文字幕| 95精品视频在线| 中文字幕在线观看不卡| 大胆欧美人体老妇| 国产女人aaa级久久久级| 国产一区二区女| 久久久国产精品麻豆| 国产老妇另类xxxxx| 久久精品欧美一区二区三区不卡 | 亚洲五月六月丁香激情| 在线免费一区三区| 亚洲综合另类小说|