Algorithm 版 (精华区)

发信人: lofe ()感激生活(), 信区: Algorithm
标  题: 原代码_6
发信站: 哈工大紫丁香 (Sun Sep  3 08:30:25 2000), 转信

unsigned code, len;

void EncodeChar(unsigned c)
{
        unsigned i;
        int j, k;

        i = 0;
        j = 0;
        k = prnt[c + T];

        /* search connections from leaf node to the root */
        do {
                i >>= 1;

                /*
                if node's address is odd, output 1
                else output 0
                */
                if (k & 1) i += 0x8000;

                j++;
        } while ((k = prnt[k]) != R);
        Putcode(j, i);
        code = i;
        len = j;
        update(c);
}

void EncodePosition(unsigned c)
{
        unsigned i;

        /* output upper 6 bits with encoding */
        i = c >> 6;
        Putcode(p_len[i], (unsigned)p_code[i] << 8);

        /* output lower 6 bits directly */
        Putcode(6, (c & 0x3f) << 10);
}

void EncodeEnd()
{
        if (putlen) {
                putc(putbuf >> 8, outfile);
                codesize++;
        }
}

int DecodeChar()
{
        unsigned c;

        c = son[R];

        /*
         * start searching tree from the root to leaves.
         * choose node #(son[]) if input bit == 0
         * else choose #(son[]+1) (input bit == 1)
         */
        while (c < T) {
                c += GetBit();
                c = son[c];
        }
        c -= T;
        update(c);
        return c;
}

int DecodePosition()
{
        unsigned i, j, c;

        /* decode upper 6 bits from given table */
        i = GetByte();
        c = (unsigned)d_code[i] << 6;
        j = d_len[i];

        /* input lower 6 bits directly */
        j -= 2;
        while (j--) {
                i = (i << 1) + GetBit();
        }
        return c | i & 0x3f;
}

--
    _______     __        ____ ________ __     __    ____     _   __
   /  _____)   / /       / _ ]  \ __ /  [ ^\_/^ ]   / _ ]    / \  /
  (  (_____   / (____   / _  ]   \  /   [  ] [  ]  / _  ]   /\  \/
   \_______) /_______) /_/ (_)   [__]   [  ] [  ] /_/ (_)  /  \_/
  ________________________________________________________/
※ 修改:.haojs 于 Sep  3 08:28:01 修改本文.[FROM: bbs.hit.edu.cn]
--
※ 转寄:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM: bbs.hit.edu.cn]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: haojs.bbs@bbs.whnet.]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.813毫秒