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

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

?? deftree.c

?? windows gzip source code
?? C
字號:
//
// deftree.c
//
// Tree creation for the compressor
//
#include "deflate.h"
#include <string.h>
#include <crtdbg.h>


//
// MAX_LITERAL_TREE elements is the largest number of elements that will ever be passed
// in to this routine
//
typedef struct 
{
    // Made left_right a single long array for performance reasons.  We always access them
    // one after the other, so there is no disadvantage.
    // left[] in lower 16 bits, right[] in upper 16 bits
//	short           left[2*MAX_LITERAL_TREE_ELEMENTS];
//	short           right[2*MAX_LITERAL_TREE_ELEMENTS];
    unsigned long   left_right[2*MAX_LITERAL_TREE_ELEMENTS];

	int             heap[MAX_LITERAL_TREE_ELEMENTS+1];

	int				num_elements;

	// Maximum allowable code length (7 for pre-tree, 15 for other trees)
	int				max_code_length;

	unsigned short *freq; // passed in as parameter
	unsigned short *code; // passed in as parameter
	
	short *			sortptr;
	int				depth;
	int				heapsize;
	int             len_cnt[17];
} t_tree_context;



static void countLen(t_tree_context *context, int i)  /* call with i = root */
{
	if (i < context->num_elements)
	{
		// check for max code length allowed
		context->len_cnt[(context->depth < context->max_code_length) ? context->depth : context->max_code_length]++;
	}
	else
	{
        unsigned long lr_value = context->left_right[i];

		context->depth++;
		countLen(context, lr_value & 65535); // formerly left[i]
		countLen(context, lr_value >> 16); // formerly right[i]
		context->depth--;
	}
}


static void makeLen(t_tree_context *context, int root, BYTE *len)
{
	int		k;
	int		cum;
	int		i;

	for (i = 0; i <= 16; i++)
		context->len_cnt[i] = 0;

	countLen(context, root);

	cum = 0;

	for (i = context->max_code_length; i > 0; i--)
		cum += (context->len_cnt[i] << (context->max_code_length - i));

	while (cum != (1 << context->max_code_length))
	{
		context->len_cnt[context->max_code_length]--;

		for (i = context->max_code_length-1; i > 0; i--)
		{
			if (context->len_cnt[i] != 0)
			{
				context->len_cnt[i]--;
				context->len_cnt[i+1] += 2;
				break;
			}
		}

		cum--;
	}

	for (i = 16; i > 0; i--)
	{
		k = context->len_cnt[i];

		while (--k >= 0)
			len[ *context->sortptr++ ] = (byte) i;
	}
}


/* priority queue; send i-th entry down heap */
static void downHeap(t_tree_context *context, int i)
{
	int j, k;

	k = context->heap[i];

	while ((j = (i<<1)) <= context->heapsize)
	{
		if (j < context->heapsize && 
			context->freq[context->heap[j]] > context->freq[context->heap[j + 1]])
	 		j++;

		if (context->freq[k] <= context->freq[context->heap[j]])
			break;

		context->heap[i] = context->heap[j];
		i = j;
	}

	context->heap[i] = k;
}


//
// Reverse the bits, len > 0
//
static unsigned int bitReverse(unsigned int code, int len)
{
	unsigned int new_code = 0;

	do
	{
		new_code |= (code & 1);
		new_code <<= 1;
		code >>= 1;

	} while (--len > 0);

	return new_code >> 1;
}


void makeCode(int num_elements, const int *len_cnt, const BYTE *len, USHORT *code)
{
	int start[18];
	int i;
	
	start[1] = 0;

	for (i = 1; i <= 16; i++)
		start[i + 1] = (start[i] + len_cnt[i]) << 1;

	for (i = 0; i < num_elements; i++)
	{
		unsigned int unreversed_code;
		
		unreversed_code = start[len[i]]++;
		code[i] = (USHORT) bitReverse(unreversed_code, len[i]);
	}
}


void makeTree(
	int					num_elements,
	int					max_code_length,
	unsigned short *	freq,
	unsigned short *	code,
	byte *				len
)
{
	t_tree_context	tree;
	int				k;
	int				avail;
	int				i;

    _ASSERT(num_elements <= MAX_LITERAL_TREE_ELEMENTS);

	// init tree context
	tree.depth	= 0;
	tree.freq	= freq;
	tree.code	= code;
	tree.num_elements = num_elements;
	tree.max_code_length = max_code_length;

	avail				= num_elements;
	tree.heapsize		= 0;
	tree.heap[1]		= 0;

	for (i = 0; i < tree.num_elements; i++)
	{
		len[i] = 0;

		if (tree.freq[i] != 0)
			tree.heap[++tree.heapsize] = i;
	}

	//
	// Less than 2 elements in the tree?
	//
	if (tree.heapsize < 2)
	{
		if (tree.heapsize == 0)
		{
			//
			// No elements in the tree?
			//
			// Then insert two fake elements and retry.
			//
			tree.freq[0] = 1;
			tree.freq[1] = 1;
		}	
		else
		{
			//
			// One element in the tree, so add a fake code
			//
			// If our only element is element #0 (heap[1] == 0), then
			// make element #1 have a frequency of 1.
			//
			// Else make element #0 have a frequency of 1.
			//
			if (tree.heap[1] == 0)
				tree.freq[1] = 1;
			else
				tree.freq[0] = 1;
		}

		//
		// Retry with these new frequencies
		//
		makeTree(num_elements, max_code_length, freq, code, len);
		return;
	}

	for (i = tree.heapsize >> 1; i >= 1; i--)
		downHeap(&tree, i);  /* make priority queue */

	tree.sortptr = tree.code;

	do
	{
		int i, j;

		/* while queue has at least two entries */
		i = tree.heap[1];  /* take out least-freq entry */

		if (i < tree.num_elements)
			*tree.sortptr++ = (short) i; 

		tree.heap[1] = tree.heap[tree.heapsize--];
		downHeap(&tree, 1);

		j = tree.heap[1];  /* next least-freq entry */

		if (j < tree.num_elements)
			*tree.sortptr++ = (short) j; 

		k = avail++;  /* generate new node */

		tree.freq[k] = tree.freq[i] + tree.freq[j];
		tree.heap[1] = k;
		downHeap(&tree, 1);  /* put into queue */

//		tree.left[k] = (short) i;
//		tree.right[k] = (short) j;
		tree.left_right[k] = (j << 16) | i;

	} while (tree.heapsize > 1);

	tree.sortptr = tree.code;

	makeLen(&tree, k, len);
	makeCode(num_elements, tree.len_cnt, len, code);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区国产盗摄色噜噜| 精品区一区二区| 亚洲欧美在线另类| 99精品国产99久久久久久白柏| 中文字幕欧美国产| 91在线观看成人| 亚洲一区在线观看免费| 欧美日韩成人综合在线一区二区| 五月天激情综合网| 久久综合久久综合久久| 高清不卡一区二区在线| 亚洲精品欧美激情| 日韩一级高清毛片| 国产成人免费高清| 中文字幕日韩一区二区| 欧美色视频在线观看| 美女一区二区三区| 国产精品久线在线观看| 欧美日韩一区视频| 激情成人午夜视频| 一区二区三区日韩精品视频| 在线成人免费观看| 成人午夜激情在线| 亚洲第一久久影院| 欧美国产精品久久| 欧美日韩精品是欧美日韩精品| 九色|91porny| 亚洲激情在线激情| 久久综合色综合88| 在线观看日韩一区| 国产精品一区免费视频| 亚洲午夜精品网| 欧美韩国一区二区| 欧美嫩在线观看| 成人18视频日本| 青娱乐精品视频在线| 亚洲欧洲av在线| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲午夜av在线| 久久夜色精品一区| 欧美日韩1区2区| 成人三级伦理片| 久久国产三级精品| 亚洲在线一区二区三区| 国产婷婷一区二区| 日韩欧美美女一区二区三区| 91成人免费在线| 成人国产精品免费观看动漫| 久久国产婷婷国产香蕉| 亚洲色图另类专区| 中文子幕无线码一区tr| 精品1区2区在线观看| 精品视频一区二区不卡| 99精品1区2区| 不卡一区中文字幕| 国产福利一区二区三区| 精品一二三四在线| 奇米888四色在线精品| 亚洲午夜精品在线| 亚洲综合男人的天堂| 亚洲色图制服诱惑| 日韩理论片一区二区| 国产精品三级视频| 国产欧美一区二区三区在线看蜜臀| 日韩一区二区在线免费观看| 欧美日韩一区二区在线视频| 91老司机福利 在线| 波多野结衣在线aⅴ中文字幕不卡| 久久99这里只有精品| 日韩电影在线观看电影| 香蕉成人啪国产精品视频综合网 | 欧美一区二区成人| 在线播放/欧美激情| 欧美日韩mp4| 欧美一级黄色录像| 日韩女优毛片在线| 精品对白一区国产伦| 精品88久久久久88久久久| 精品剧情v国产在线观看在线| 91精品福利在线一区二区三区| 欧美另类高清zo欧美| 51精品秘密在线观看| 日韩美女天天操| xfplay精品久久| 国产日韩欧美精品在线| 国产精品婷婷午夜在线观看| 国产精品免费人成网站| 综合久久久久综合| 亚洲不卡一区二区三区| 日韩电影网1区2区| 激情综合亚洲精品| 成熟亚洲日本毛茸茸凸凹| 972aa.com艺术欧美| 欧美性三三影院| 日韩午夜在线影院| 国产午夜精品一区二区| 最新国产成人在线观看| 亚洲一区二区三区视频在线播放| 舔着乳尖日韩一区| 激情文学综合插| 高清免费成人av| 欧美自拍丝袜亚洲| 欧美电影免费观看高清完整版| 精品成人私密视频| 国产精品久久久久久妇女6080| 亚洲丝袜自拍清纯另类| 天天操天天综合网| 国产综合色精品一区二区三区| 99久久久国产精品免费蜜臀| 欧美日韩一区二区三区视频| 精品福利一区二区三区免费视频| 国产精品另类一区| 视频在线在亚洲| 不卡视频一二三| 7777精品伊人久久久大香线蕉超级流畅 | 男男成人高潮片免费网站| 成人高清在线视频| 欧美日韩国产首页在线观看| 久久亚洲综合色一区二区三区| 亚洲乱码国产乱码精品精可以看| 青青草91视频| 日本韩国一区二区| 久久久国际精品| 亚洲精选在线视频| 国产乱码精品一品二品| 欧美日韩亚洲综合一区二区三区| 久久色在线视频| 午夜精品久久久久久不卡8050| 国产精品一级黄| 欧美一区二区高清| 亚洲一区二区三区在线| 成人丝袜18视频在线观看| 日韩欧美一级片| 亚洲国产欧美另类丝袜| 国产99久久久国产精品免费看| 欧美一区二区三区日韩视频| 亚洲日本在线天堂| 国产福利一区二区三区在线视频| 欧美另类久久久品| 亚洲一卡二卡三卡四卡无卡久久| 成人黄色a**站在线观看| 欧美成人激情免费网| 亚洲一区二区在线免费看| 成人sese在线| 国产欧美一区二区三区鸳鸯浴| 久久国产视频网| 日韩三级中文字幕| 婷婷综合另类小说色区| 欧美影片第一页| 亚洲色图一区二区| av中文字幕一区| 国产精品久久久久影院色老大 | 国产一区二区三区免费| 欧美精品丝袜久久久中文字幕| 一二三四区精品视频| kk眼镜猥琐国模调教系列一区二区| 久久网站最新地址| 国内精品久久久久影院色| 欧美成人一级视频| 极品瑜伽女神91| 久久综合九色欧美综合狠狠| 蜜桃久久av一区| 日韩一二三区视频| 亚洲欧美在线另类| 亚洲国产一区视频| 色国产综合视频| 亚洲图片欧美视频| 欧美性xxxxx极品少妇| 夜夜爽夜夜爽精品视频| 在线中文字幕一区| 亚洲美女淫视频| 欧美在线你懂的| 亚洲综合丁香婷婷六月香| 色综合久久综合网| 一级日本不卡的影视| 欧美日韩一区二区三区视频| 99精品视频在线播放观看| 中文字幕一区二区三区不卡 | 午夜影院久久久| 欧美在线免费观看亚洲| 日韩av一二三| 久久亚洲精精品中文字幕早川悠里| 国内精品写真在线观看 | 亚洲精品国产第一综合99久久 | 国产69精品久久久久毛片| 国产欧美日韩麻豆91| 在线日韩国产精品| 亚洲国产日韩精品| 日韩亚洲欧美成人一区| 国产精品91xxx| 亚洲欧美国产高清| 91麻豆精品国产综合久久久久久| 久久爱www久久做| 国产精品久久久爽爽爽麻豆色哟哟| 色哟哟亚洲精品| 日日骚欧美日韩| 欧美高清在线一区| 在线观看不卡视频| 国产在线播放一区二区三区| 中文字幕中文乱码欧美一区二区|