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

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

?? encode.c

?? 包含Lzw,Huff1,Dhuff等等多種壓縮算法的源代碼包
?? C
字號:
/***********************************************************
        encode.c -- sliding dictionary with percolating update
***********************************************************/
#include "ar.h"
#include <stdlib.h>
#include <string.h>  /* memmove() */

#define PERCOLATE  1
#define NIL        0
#define MAX_HASH_VAL (3 * DICSIZ + (DICSIZ / 512 + 1) * UCHAR_MAX)

typedef short node;

static uchar *text, *childcount;
static node pos, matchpos, avail,
        *position, *parent, *prev, *next = NULL;
static int remainder, matchlen;

#if MAXMATCH <= (UCHAR_MAX + 1)
        static uchar *level;
#else
        static ushort *level;
#endif

static void allocate_memory(void)
{
        if (next != NULL) return;
    text = malloc(DICSIZ * 2 + MAXMATCH);
        level      = malloc((DICSIZ + UCHAR_MAX + 1) * sizeof(*level));
        childcount = malloc((DICSIZ + UCHAR_MAX + 1) * sizeof(*childcount));
        #if PERCOLATE
          position = malloc((DICSIZ + UCHAR_MAX + 1) * sizeof(*position));
        #else
          position = malloc(DICSIZ * sizeof(*position));
        #endif
        parent     = malloc(DICSIZ * 2 * sizeof(*parent));
        prev       = malloc(DICSIZ * 2 * sizeof(*prev));
        next       = malloc((MAX_HASH_VAL + 1) * sizeof(*next));
        if (next == NULL) error("Out of memory.");
}

static void init_slide(void)
{
        node i;

        for (i = DICSIZ; i <= DICSIZ + UCHAR_MAX; i++) {
                level[i] = 1;
                #if PERCOLATE
                        position[i] = NIL;  /* sentinel */
                #endif
        }
        for (i = DICSIZ; i < DICSIZ * 2; i++) parent[i] = NIL;
        avail = 1;
        for (i = 1; i < DICSIZ - 1; i++) next[i] = i + 1;
        next[DICSIZ - 1] = NIL;
        for (i = DICSIZ * 2; i <= MAX_HASH_VAL; i++) next[i] = NIL;
}

#define HASH(p, c) ((p) + ((c) << (DICBIT - 9)) + DICSIZ * 2)

static node child(node q, uchar c)
        /* q's child for character c (NIL if not found) */
{
        node r;

        r = next[HASH(q, c)];
        parent[NIL] = q;  /* sentinel */
        while (parent[r] != q) r = next[r];
        return r;
}

static void makechild(node q, uchar c, node r)
        /* Let r be q's child for character c. */
{
        node h, t;

        h = HASH(q, c);
        t = next[h];  next[h] = r;  next[r] = t;
        prev[t] = r;  prev[r] = h;
        parent[r] = q;  childcount[q]++;
}

void split(node old)
{
        node new, t;

        new = avail;  avail = next[new];  childcount[new] = 0;
        t = prev[old];  prev[new] = t;  next[t] = new;
        t = next[old];  next[new] = t;  prev[t] = new;
        parent[new] = parent[old];
        level[new] = matchlen;
        position[new] = pos;
        makechild(new, text[matchpos + matchlen], old);
        makechild(new, text[pos + matchlen], pos);
}

static void insert_node(void)
{
        node q, r, j, t;
        uchar c, *t1, *t2;

        if (matchlen >= 4) {
                matchlen--;
                r = (matchpos + 1) | DICSIZ;
                while ((q = parent[r]) == NIL) r = next[r];
                while (level[q] >= matchlen) {
                        r = q;  q = parent[q];
                }
                #if PERCOLATE
                        t = q;
                        while (position[t] < 0) {
                                position[t] = pos;  t = parent[t];
                        }
                        if (t < DICSIZ) position[t] = pos | PERC_FLAG;
                #else
                        t = q;
                        while (t < DICSIZ) {
                                position[t] = pos;  t = parent[t];
                        }
                #endif
        } else {
                q = text[pos] + DICSIZ;  c = text[pos + 1];
                if ((r = child(q, c)) == NIL) {
                        makechild(q, c, pos);  matchlen = 1;
                        return;
                }
                matchlen = 2;
        }
        for ( ; ; ) {
                if (r >= DICSIZ) {
                        j = MAXMATCH;  matchpos = r;
                } else {
                        j = level[r];
                        matchpos = position[r] & ~PERC_FLAG;
                }
                if (matchpos >= pos) matchpos -= DICSIZ;
                t1 = &text[pos + matchlen];  t2 = &text[matchpos + matchlen];
                while (matchlen < j) {
                        if (*t1 != *t2) {  split(r);  return;  }
                        matchlen++;  t1++;  t2++;
                }
                if (matchlen >= MAXMATCH) break;
                position[r] = pos;
                q = r;
                if ((r = child(q, *t1)) == NIL) {
                        makechild(q, *t1, pos);  return;
                }
                matchlen++;
        }
        t = prev[r];  prev[pos] = t;  next[t] = pos;
        t = next[r];  next[pos] = t;  prev[t] = pos;
        parent[pos] = q;  parent[r] = NIL;
        next[r] = pos;  /* special use of next[] */
}

static void delete_node(void)
{
        #if PERCOLATE
                node q, r, s, t, u;
        #else
                node r, s, t, u;
        #endif

        if (parent[pos] == NIL) return;
        r = prev[pos];  s = next[pos];
        next[r] = s;  prev[s] = r;
        r = parent[pos];  parent[pos] = NIL;
        if (r >= DICSIZ || --childcount[r] > 1) return;
        #if PERCOLATE
                t = position[r] & ~PERC_FLAG;
        #else
                t = position[r];
        #endif
        if (t >= pos) t -= DICSIZ;
        #if PERCOLATE
                s = t;  q = parent[r];
                while ((u = position[q]) & PERC_FLAG) {
                        u &= ~PERC_FLAG;  if (u >= pos) u -= DICSIZ;
                        if (u > s) s = u;
                        position[q] = (s | DICSIZ);  q = parent[q];
                }
                if (q < DICSIZ) {
                        if (u >= pos) u -= DICSIZ;
                        if (u > s) s = u;
                        position[q] = s | DICSIZ | PERC_FLAG;
                }
        #endif
        s = child(r, text[t + level[r]]);
        t = prev[s];  u = next[s];
        next[t] = u;  prev[u] = t;
        t = prev[r];  next[t] = s;  prev[s] = t;
        t = next[r];  prev[t] = s;  next[s] = t;
        parent[s] = parent[r];  parent[r] = NIL;
        next[r] = avail;  avail = r;
}

static void get_next_match(void)
{
        int n;

        remainder--;
        if (++pos == DICSIZ * 2) {
                memmove(&text[0], &text[DICSIZ], DICSIZ + MAXMATCH);
                n = fread_crc(&text[DICSIZ + MAXMATCH], DICSIZ, infile);
                remainder += n;  pos = DICSIZ;  putc('.', stderr);
        }
        delete_node();  insert_node();
}

void encode(void)
{
        int lastmatchlen;
        node lastmatchpos;

        allocate_memory();  init_slide();  huf_encode_start();
        remainder = fread_crc(&text[DICSIZ], DICSIZ + MAXMATCH, infile);
        putc('.', stderr);
        matchlen = 0;
        pos = DICSIZ;  insert_node();
        if (matchlen > remainder) matchlen = remainder;
        while (remainder > 0 && ! unpackable) {
                lastmatchlen = matchlen;  lastmatchpos = matchpos;
                get_next_match();
                if (matchlen > remainder) matchlen = remainder;
                if (matchlen > lastmatchlen || lastmatchlen < THRESHOLD)
                        output(text[pos - 1], 0);
                else {
                        output(lastmatchlen + (UCHAR_MAX + 1 - THRESHOLD),
                                   (pos - lastmatchpos - 2) & (DICSIZ - 1));
                        while (--lastmatchlen > 0) get_next_match();
                        if (matchlen > remainder) matchlen = remainder;
                }
        }
        huf_encode_end();
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区不卡在线视频 午夜欧美不卡在| 国产日韩欧美亚洲| 91丨九色丨黑人外教| 国产成人欧美日韩在线电影| 久久黄色级2电影| 日产国产高清一区二区三区| 天堂久久一区二区三区| 天天射综合影视| 婷婷综合五月天| 日本不卡一二三| 精品一区二区免费看| 激情图片小说一区| 国产成人精品亚洲777人妖| 国产成人一区二区精品非洲| 国产精品一区二区三区四区| 成人在线视频一区二区| 91丝袜美腿高跟国产极品老师| 色先锋aa成人| 欧美高清视频www夜色资源网| 91精品国产欧美日韩| 久久青草欧美一区二区三区| 国产女人18毛片水真多成人如厕 | 欧美一级日韩一级| 欧美成人国产一区二区| 国产婷婷色一区二区三区| 国产精品久久久久久久久免费相片 | 不卡区在线中文字幕| 91成人在线观看喷潮| 在线观看亚洲一区| 日韩免费视频一区二区| 亚洲国产精品ⅴa在线观看| 亚洲免费在线视频| 老色鬼精品视频在线观看播放| 懂色av一区二区三区蜜臀| 欧洲精品一区二区| 国产精品视频yy9299一区| 亚洲视频一二三区| 美女在线视频一区| 成人福利视频在线看| 69av一区二区三区| 国产精品免费看片| 久久99精品国产91久久来源| av毛片久久久久**hd| 69精品人人人人| 日韩精品一区在线观看| 国产午夜精品在线观看| 亚洲综合色婷婷| 国产麻豆精品在线观看| 在线视频一区二区三| 久久精品水蜜桃av综合天堂| 亚洲一区二区av电影| 国产一区二区三区在线观看精品| 欧洲亚洲精品在线| 国产精品乱码久久久久久| 裸体一区二区三区| 91久久香蕉国产日韩欧美9色| 日韩欧美aaaaaa| 亚洲福利电影网| 99精品久久免费看蜜臀剧情介绍| 欧美大度的电影原声| 亚洲国产成人精品视频| av高清不卡在线| 久久精品亚洲一区二区三区浴池| 天堂va蜜桃一区二区三区漫画版| 91色在线porny| 中文在线一区二区| 豆国产96在线|亚洲| 精品福利一区二区三区| 久久精品国产精品亚洲精品| 欧美日韩午夜在线| 午夜精品一区二区三区电影天堂 | 国产精品私人影院| 国产v综合v亚洲欧| 国产日韩三级在线| 国产成人亚洲精品狼色在线 | 国产拍欧美日韩视频二区| 精品一区二区三区在线观看| 欧美一区二区三区播放老司机| 一区二区高清在线| 色狠狠av一区二区三区| 亚洲一区二区黄色| 欧美日韩亚洲国产综合| 日韩综合在线视频| 制服.丝袜.亚洲.中文.综合| 日韩福利视频导航| 日韩欧美一区在线观看| 精品制服美女久久| 久久午夜羞羞影院免费观看| 国产久卡久卡久卡久卡视频精品| 久久免费看少妇高潮| 国产成人午夜电影网| 中文字幕av免费专区久久| 91视频国产观看| 亚洲一二三区不卡| 日韩午夜电影在线观看| 国产一区二区不卡老阿姨| 2023国产精品自拍| 成人动漫一区二区| 亚洲不卡在线观看| 欧美mv日韩mv国产网站| 床上的激情91.| 一区二区三区精品视频在线| 制服丝袜一区二区三区| 国产美女久久久久| 亚洲人123区| 欧美一二三在线| 国产成a人亚洲精| 亚洲永久免费av| 精品国产91亚洲一区二区三区婷婷| 国产精品1区二区.| 亚洲午夜久久久久久久久久久| 欧美一级一级性生活免费录像| 国产99久久久国产精品潘金网站| 亚洲人成亚洲人成在线观看图片 | 国产中文字幕精品| 亚洲精品日韩一| 日韩精品中文字幕在线一区| 成人激情开心网| 免费看日韩精品| 国产精品国产三级国产三级人妇| 欧美日韩在线免费视频| 国模娜娜一区二区三区| 玉足女爽爽91| 亚洲国产成人自拍| 欧美一区二区国产| 91久久精品一区二区三| 国产精品亚洲а∨天堂免在线| 亚洲大片免费看| 国产精品国产精品国产专区不蜜| 91精品国产综合久久精品图片| 99国内精品久久| 国产剧情一区在线| 久久精品国产免费| 香蕉av福利精品导航| 亚洲同性gay激情无套| 日韩一级黄色片| 欧美喷水一区二区| 色94色欧美sute亚洲13| 成人在线视频一区二区| 美日韩一区二区三区| 亚洲mv在线观看| 亚洲免费在线看| 椎名由奈av一区二区三区| 久久久精品影视| 26uuu久久综合| 制服丝袜在线91| 69堂亚洲精品首页| 欧美日韩久久久| 91成人国产精品| 欧美在线视频你懂得| 色婷婷一区二区三区四区| 99久久99久久精品国产片果冻| 国产一区二区三区四区五区入口| 免费的成人av| 精品一区二区精品| 黄页视频在线91| 国产久卡久卡久卡久卡视频精品| 美国十次了思思久久精品导航| 日本不卡不码高清免费观看| 午夜视频一区在线观看| 亚洲1区2区3区视频| 亚洲成人在线网站| 日本视频中文字幕一区二区三区| 婷婷开心激情综合| 美女一区二区久久| 韩国女主播成人在线观看| 国产麻豆日韩欧美久久| 国产精品66部| 91社区在线播放| 欧美日韩一区不卡| 日韩午夜在线影院| 中文字幕欧美区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 中文字幕在线一区二区三区| 亚洲女性喷水在线观看一区| 亚洲日本欧美天堂| 日本不卡的三区四区五区| 国产乱子轮精品视频| 白白色 亚洲乱淫| 欧美午夜精品电影| 精品国内片67194| 国产精品超碰97尤物18| 亚洲一区二区三区视频在线| 亚洲h精品动漫在线观看| 国内外精品视频| 91视频免费观看| 日韩欧美精品在线| 日韩毛片一二三区| 日本美女一区二区三区视频| 国产成人a级片| 欧美美女一区二区三区| 国产日本一区二区| 亚洲成人福利片| 国产精品99久| 欧美人伦禁忌dvd放荡欲情| 久久精品人人爽人人爽| 亚洲国产欧美在线人成| 精品一区二区三区免费视频| 91在线一区二区三区| 精品少妇一区二区三区在线播放|