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

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

?? puff.c

?? 一個本地database引擎,支持中文T_Sql查詢,兼容DELPHI標準數據庫控件
?? C
?? 第 1 頁 / 共 3 頁
字號:
        if (left > 8) left = 8;
    }
    return -9;                          /* ran out of codes */
}
#endif /* SLOW */

/*
 * Given the list of code lengths length[0..n-1] representing a canonical
 * Huffman code for n symbols, construct the tables required to decode those
 * codes.  Those tables are the number of codes of each length, and the symbols
 * sorted by length, retaining their original order within each length.  The
 * return value is zero for a complete code set, negative for an over-
 * subscribed code set, and positive for an incomplete code set.  The tables
 * can be used if the return value is zero or positive, but they cannot be used
 * if the return value is negative.  If the return value is zero, it is not
 * possible for decode() using that table to return an error--any stream of
 * enough bits will resolve to a symbol.  If the return value is positive, then
 * it is possible for decode() using that table to return an error for received
 * codes past the end of the incomplete lengths.
 *
 * Not used by decode(), but used for error checking, h->count[0] is the number
 * of the n symbols not in the code.  So n - h->count[0] is the number of
 * codes.  This is useful for checking for incomplete codes that have more than
 * one symbol, which is an error in a dynamic block.
 *
 * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS
 * This is assured by the construction of the length arrays in dynamic() and
 * fixed() and is not verified by construct().
 *
 * Format notes:
 *
 * - Permitted and expected examples of incomplete codes are one of the fixed
 *   codes and any code with a single symbol which in deflate is coded as one
 *   bit instead of zero bits.  See the format notes for fixed() and dynamic().
 *
 * - Within a given code length, the symbols are kept in ascending order for
 *   the code bits definition.
 */
local int construct(struct huffman *h, short *length, int n)
{
    int symbol;         /* current symbol when stepping through length[] */
    int len;            /* current length when stepping through h->count[] */
    int left;           /* number of possible codes left of current length */
    short offs[MAXBITS+1];      /* offsets in symbol table for each length */

    /* count number of codes of each length */
    for (len = 0; len <= MAXBITS; len++)
        h->count[len] = 0;
    for (symbol = 0; symbol < n; symbol++)
        (h->count[length[symbol]])++;   /* assumes lengths are within bounds */
    if (h->count[0] == n)               /* no codes! */
        return 0;                       /* complete, but decode() will fail */

    /* check for an over-subscribed or incomplete set of lengths */
    left = 1;                           /* one possible code of zero length */
    for (len = 1; len <= MAXBITS; len++) {
        left <<= 1;                     /* one more bit, double codes left */
        left -= h->count[len];          /* deduct count from possible codes */
        if (left < 0) return left;      /* over-subscribed--return negative */
    }                                   /* left > 0 means incomplete */

    /* generate offsets into symbol table for each length for sorting */
    offs[1] = 0;
    for (len = 1; len < MAXBITS; len++)
        offs[len + 1] = offs[len] + h->count[len];

    /*
     * put symbols in table sorted by length, by symbol order within each
     * length
     */
    for (symbol = 0; symbol < n; symbol++)
        if (length[symbol] != 0)
            h->symbol[offs[length[symbol]]++] = symbol;

    /* return zero for complete set, positive for incomplete set */
    return left;
}

/*
 * Decode literal/length and distance codes until an end-of-block code.
 *
 * Format notes:
 *
 * - Compressed data that is after the block type if fixed or after the code
 *   description if dynamic is a combination of literals and length/distance
 *   pairs terminated by and end-of-block code.  Literals are simply Huffman
 *   coded bytes.  A length/distance pair is a coded length followed by a
 *   coded distance to represent a string that occurs earlier in the
 *   uncompressed data that occurs again at the current location.
 *
 * - Literals, lengths, and the end-of-block code are combined into a single
 *   code of up to 286 symbols.  They are 256 literals (0..255), 29 length
 *   symbols (257..285), and the end-of-block symbol (256).
 *
 * - There are 256 possible lengths (3..258), and so 29 symbols are not enough
 *   to represent all of those.  Lengths 3..10 and 258 are in fact represented
 *   by just a length symbol.  Lengths 11..257 are represented as a symbol and
 *   some number of extra bits that are added as an integer to the base length
 *   of the length symbol.  The number of extra bits is determined by the base
 *   length symbol.  These are in the static arrays below, lens[] for the base
 *   lengths and lext[] for the corresponding number of extra bits.
 *
 * - The reason that 258 gets its own symbol is that the longest length is used
 *   often in highly redundant files.  Note that 258 can also be coded as the
 *   base value 227 plus the maximum extra value of 31.  While a good deflate
 *   should never do this, it is not an error, and should be decoded properly.
 *
 * - If a length is decoded, including its extra bits if any, then it is
 *   followed a distance code.  There are up to 30 distance symbols.  Again
 *   there are many more possible distances (1..32768), so extra bits are added
 *   to a base value represented by the symbol.  The distances 1..4 get their
 *   own symbol, but the rest require extra bits.  The base distances and
 *   corresponding number of extra bits are below in the static arrays dist[]
 *   and dext[].
 *
 * - Literal bytes are simply written to the output.  A length/distance pair is
 *   an instruction to copy previously uncompressed bytes to the output.  The
 *   copy is from distance bytes back in the output stream, copying for length
 *   bytes.
 *
 * - Distances pointing before the beginning of the output data are not
 *   permitted.
 *
 * - Overlapped copies, where the length is greater than the distance, are
 *   allowed and common.  For example, a distance of one and a length of 258
 *   simply copies the last byte 258 times.  A distance of four and a length of
 *   twelve copies the last four bytes three times.  A simple forward copy
 *   ignoring whether the length is greater than the distance or not implements
 *   this correctly.  You should not use memcpy() since its behavior is not
 *   defined for overlapped arrays.  You should not use memmove() or bcopy()
 *   since though their behavior -is- defined for overlapping arrays, it is
 *   defined to do the wrong thing in this case.
 */
local int codes(struct state *s,
                struct huffman *lencode,
                struct huffman *distcode)
{
    int symbol;         /* decoded symbol */
    int len;            /* length for copy */
    unsigned dist;      /* distance for copy */
    static const short lens[29] = { /* Size base for length codes 257..285 */
        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258};
    static const short lext[29] = { /* Extra bits for length codes 257..285 */
        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0};
    static const short dists[30] = { /* Offset base for distance codes 0..29 */
        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
        8193, 12289, 16385, 24577};
    static const short dext[30] = { /* Extra bits for distance codes 0..29 */
        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
        12, 12, 13, 13};

    /* decode literals and length/distance pairs */
    do {
        symbol = decode(s, lencode);
        if (symbol < 0) return symbol;  /* invalid symbol */
        if (symbol < 256) {             /* literal: symbol is the byte */
            /* write out the literal */
            if (s->out != NIL) {
                if (s->outcnt == s->outlen) return 1;
                s->out[s->outcnt] = symbol;
            }
            s->outcnt++;
        }
        else if (symbol > 256) {        /* length */
            /* get and compute length */
            symbol -= 257;
            if (symbol >= 29) return -9;        /* invalid fixed code */
            len = lens[symbol] + bits(s, lext[symbol]);

            /* get and check distance */
            symbol = decode(s, distcode);
            if (symbol < 0) return symbol;      /* invalid symbol */
            dist = dists[symbol] + bits(s, dext[symbol]);
            if (dist > s->outcnt)
                return -10;     /* distance too far back */

            /* copy length bytes from distance bytes back */
            if (s->out != NIL) {
                if (s->outcnt + len > s->outlen) return 1;
                while (len--) {
                    s->out[s->outcnt] = s->out[s->outcnt - dist];
                    s->outcnt++;
                }
            }
            else
                s->outcnt += len;
        }
    } while (symbol != 256);            /* end of block symbol */

    /* done with a valid fixed or dynamic block */
    return 0;
}

/*
 * Process a fixed codes block.
 *
 * Format notes:
 *
 * - This block type can be useful for compressing small amounts of data for
 *   which the size of the code descriptions in a dynamic block exceeds the
 *   benefit of custom codes for that block.  For fixed codes, no bits are
 *   spent on code descriptions.  Instead the code lengths for literal/length
 *   codes and distance codes are fixed.  The specific lengths for each symbol
 *   can be seen in the "for" loops below.
 *
 * - The literal/length code is complete, but has two symbols that are invalid
 *   and should result in an error if received.  This cannot be implemented
 *   simply as an incomplete code since those two symbols are in the "middle"
 *   of the code.  They are eight bits long and the longest literal/length\
 *   code is nine bits.  Therefore the code must be constructed with those
 *   symbols, and the invalid symbols must be detected after decoding.
 *
 * - The fixed distance codes also have two invalid symbols that should result
 *   in an error if received.  Since all of the distance codes are the same
 *   length, this can be implemented as an incomplete code.  Then the invalid
 *   codes are detected while decoding.
 */
local int fixed(struct state *s)
{
    static int virgin = 1;
    static short lencnt[MAXBITS+1], lensym[FIXLCODES];
    static short distcnt[MAXBITS+1], distsym[MAXDCODES];
    static struct huffman lencode = {lencnt, lensym};
    static struct huffman distcode = {distcnt, distsym};

    /* build fixed huffman tables if first call (may not be thread safe) */
    if (virgin) {
        int symbol;
        short lengths[FIXLCODES];

        /* literal/length table */
        for (symbol = 0; symbol < 144; symbol++)
            lengths[symbol] = 8;
        for (; symbol < 256; symbol++)
            lengths[symbol] = 9;
        for (; symbol < 280; symbol++)
            lengths[symbol] = 7;
        for (; symbol < FIXLCODES; symbol++)
            lengths[symbol] = 8;
        construct(&lencode, lengths, FIXLCODES);

        /* distance table */
        for (symbol = 0; symbol < MAXDCODES; symbol++)
            lengths[symbol] = 5;
        construct(&distcode, lengths, MAXDCODES);

        /* do this just once */
        virgin = 0;
    }

    /* decode data until end-of-block code */
    return codes(s, &lencode, &distcode);
}

/*
 * Process a dynamic codes block.
 *
 * Format notes:
 *
 * - A dynamic block starts with a description of the literal/length and
 *   distance codes for that block.  New dynamic blocks allow the compressor to
 *   rapidly adapt to changing data with new codes optimized for that data.
 *
 * - The codes used by the deflate format are "canonical", which means that
 *   the actual bits of the codes are generated in an unambiguous way simply
 *   from the number of bits in each code.  Therefore the code descriptions
 *   are simply a list of code lengths for each symbol.
 *
 * - The code lengths are stored in order for the symbols, so lengths are
 *   provided for each of the literal/length symbols, and for each of the
 *   distance symbols.
 *
 * - If a symbol is not used in the block, this is represented by a zero as
 *   as the code length.  This does not mean a zero-length code, but rather
 *   that no code should be created for this symbol.  There is no way in the
 *   deflate format to represent a zero-length code.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一级二级在线| 国产成人精品三级麻豆| 精品系列免费在线观看| 成人黄色a**站在线观看| 欧美日韩在线三区| 日本一区二区三区高清不卡| 偷拍亚洲欧洲综合| 成人一区二区三区中文字幕| 欧美一区二区三区人| 亚洲激情自拍视频| 成人av网站大全| 26uuu亚洲综合色欧美| 亚洲丶国产丶欧美一区二区三区| 国产1区2区3区精品美女| 日韩欧美国产高清| 午夜精品福利久久久| 色婷婷久久99综合精品jk白丝| 精品成人佐山爱一区二区| 一区二区三区在线视频观看| 国产91在线观看| 久久久久国产成人精品亚洲午夜| 首页亚洲欧美制服丝腿| 欧美午夜精品久久久| 亚洲视频免费看| 粉嫩久久99精品久久久久久夜| 26uuu欧美| 激情久久五月天| 精品欧美乱码久久久久久1区2区| 日韩高清一区在线| 欧美一区二区三区四区久久| 午夜视黄欧洲亚洲| 欧美性一区二区| 亚洲国产日韩a在线播放| 不卡的看片网站| 欧美韩国一区二区| 精品亚洲国产成人av制服丝袜| 国产成人精品午夜视频免费| 国产欧美久久久精品影院| 精一区二区三区| 日韩精品中文字幕一区二区三区| 一区二区国产盗摄色噜噜| 99精品一区二区| 1000部国产精品成人观看| 粉嫩久久99精品久久久久久夜| 精品91自产拍在线观看一区| 久久丁香综合五月国产三级网站| 欧美精品在线视频| 九九**精品视频免费播放| 精品久久久三级丝袜| 粗大黑人巨茎大战欧美成人| 国产精品萝li| 欧美性生活影院| 无码av中文一区二区三区桃花岛| 欧美日韩精品欧美日韩精品一综合| 一区二区三区丝袜| 欧美久久一二区| 麻豆91精品视频| 亚洲精品在线一区二区| 国产成人精品免费视频网站| 国产色产综合产在线视频| 成人性生交大片免费看视频在线| 亚洲国产精品ⅴa在线观看| 国产精品1区2区| 日本一区免费视频| 成人精品亚洲人成在线| 亚洲女厕所小便bbb| 一本色道久久加勒比精品| 亚洲午夜精品17c| 欧美一区二区三区系列电影| 国产在线精品国自产拍免费| 国产精品热久久久久夜色精品三区| 色综合中文综合网| 成人一二三区视频| 久久久久久久久久看片| 99久久综合狠狠综合久久| 一区二区欧美精品| 91精品欧美福利在线观看 | 国产精品二三区| 欧美在线看片a免费观看| 日韩和欧美一区二区| 久久男人中文字幕资源站| 波多野结衣亚洲| 亚洲国产毛片aaaaa无费看| 精品久久五月天| 成人av影院在线| 久久av老司机精品网站导航| 中文av一区二区| 欧美第一区第二区| 91激情在线视频| 狠狠色丁香久久婷婷综| 亚洲一区二区在线免费观看视频| 日韩一区二区在线观看| 成人动漫视频在线| 日韩电影网1区2区| 国产精品对白交换视频| 欧美成va人片在线观看| 91捆绑美女网站| 国产一区二区三区在线观看免费视频 | 欧美一级片在线看| 成人av在线资源| 久草这里只有精品视频| 亚洲免费观看在线视频| 欧美xxx久久| av成人动漫在线观看| 精品一区二区国语对白| 亚洲欧美视频一区| 亚洲色欲色欲www| 国产日韩欧美精品在线| 日韩欧美一区二区免费| 久久国产精品色| 香蕉久久一区二区不卡无毒影院| 国产精品女同互慰在线看| 日韩西西人体444www| 在线观看国产一区二区| 高清国产一区二区| 黑人巨大精品欧美黑白配亚洲| 亚洲高清一区二区三区| 亚洲国产高清在线| 精品剧情在线观看| 7777精品伊人久久久大香线蕉| 99免费精品在线观看| 国产综合色精品一区二区三区| 午夜一区二区三区视频| 一区二区三区欧美激情| 国产精品另类一区| 久久久精品国产免费观看同学| 日韩欧美www| 久久无码av三级| 亚洲精品一区二区三区精华液| 777午夜精品视频在线播放| 欧美美女一区二区| 精品精品国产高清a毛片牛牛 | 舔着乳尖日韩一区| 亚洲国产精品视频| 天堂va蜜桃一区二区三区 | 亚洲精品久久久久久国产精华液| 亚洲欧美在线另类| 亚洲综合在线电影| 亚洲成人你懂的| 日韩精品福利网| 久久激情综合网| 日韩影视精彩在线| 免费视频最近日韩| 国产乱一区二区| jizz一区二区| 激情综合色播五月| 国产91清纯白嫩初高中在线观看| 国产成人亚洲综合色影视| 不卡一卡二卡三乱码免费网站| 成人午夜激情在线| 国产精品一区二区在线观看不卡 | 精品国产91洋老外米糕| 国产日产精品一区| 一区二区在线看| 五月综合激情日本mⅴ| 久久 天天综合| 成人做爰69片免费看网站| 91视频在线观看| 91精品国产一区二区三区蜜臀 | 成人综合婷婷国产精品久久免费| 99在线精品观看| 91精品午夜视频| 中文字幕欧美三区| 亚洲风情在线资源站| 国产综合色产在线精品| 99久久99久久精品免费看蜜桃| 欧美亚洲一区二区在线观看| 国产午夜精品久久久久久久| 亚洲综合色视频| 丰满白嫩尤物一区二区| 欧美人妖巨大在线| 国产精品成人午夜| 精品中文字幕一区二区| 色综合色综合色综合| 2019国产精品| 亚洲成人免费av| 丁香一区二区三区| 色综合中文字幕| 久久婷婷国产综合国色天香| 亚洲精品国产视频| 国产成人av一区| 欧美裸体一区二区三区| 亚洲人妖av一区二区| 激情偷乱视频一区二区三区| 色婷婷av一区| 国产日韩综合av| 久久精品国产**网站演员| 91丨九色丨蝌蚪富婆spa| 国产日产精品一区| 视频一区视频二区中文| 成人性生交大片免费看在线播放| 日韩午夜激情av| 亚洲图片你懂的| 国产成人午夜精品影院观看视频| 7777精品久久久大香线蕉| 亚洲高清免费一级二级三级| 91美女福利视频| 亚洲综合免费观看高清完整版在线 | 国产精品一二二区| 色视频一区二区|