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

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

?? inftree.c

?? windows gzip source code
?? C
字號:
//
// inftree.c
//
// Reads the tree for a dynamic block
//
#include <crtdbg.h>
#include "inflate.h"
#include "infmacro.h"
#include "maketbl.h"


//
// Decode an element from the pre-tree
//
static int decodePretreeElement(t_decoder_context *context)
{
	int element;

retry:
	element = context->pretree_table[context->bitbuf & PRETREE_TABLE_MASK];

	while (element < 0)
	{
		unsigned long mask = 1 << PRETREE_TABLE_BITS;

		do
		{
			element = -element;

			if ((context->bitbuf & mask) == 0)
				element = context->pretree_left[element];
			else
				element = context->pretree_right[element];

			mask <<= 1;
		} while (element < 0);
	}

	//
	// If this code is longer than the # bits we had in the bit buffer (i.e.
	// we read only part of the code - but enough to know that it's too long),
	// return -1.
	//
	if (context->pretree_code_length[element] > (context->bitcount+16))
	{
		// if we run out of bits, return -1
		if (context->input_curpos >= context->end_input_buffer)
			return -1;

		context->bitbuf |= ((*context->input_curpos++) << (context->bitcount+16)); 
		context->bitcount += 8; 
		goto retry;
	}

	dumpBits(context, context->pretree_code_length[element]);

	return element;
}



//
// Dilemma: 
// 
// This code runs slowly because bitcount and bitbuf are accessed through the context,
// not as local variables.  However, if they were made into local variables, the code
// size would be massively increased.  Luckily the speed of this code isn't so important
// compared to that of decodeCompressedBlock().
//          
BOOL readDynamicBlockHeader(t_decoder_context *context)
{
	int		i;
	int     code;

#define NUM_CODE_LENGTH_ORDER_CODES (sizeof(g_CodeOrder)/sizeof(g_CodeOrder[0]))
    // make sure extern g_CodeOrder[] declared with array size!

	switch (context->state)
	{
		case STATE_READING_NUM_LIT_CODES:
			goto reenter_state_reading_num_lit_codes;

		case STATE_READING_NUM_DIST_CODES:
			goto reenter_state_reading_num_dist_codes;

		case STATE_READING_NUM_CODE_LENGTH_CODES:
			goto reenter_state_reading_num_code_length_codes;

		case STATE_READING_CODE_LENGTH_CODES:
		{
			i = context->state_loop_counter;
			goto reenter_state_reading_code_length_codes;
		}

		case STATE_READING_TREE_CODES_BEFORE:
		{
			i = context->state_loop_counter;
			goto reenter_state_reading_tree_codes_before;
		}

		case STATE_READING_TREE_CODES_AFTER:
		{
			i = context->state_loop_counter;
			code = context->state_code;
			goto reenter_state_reading_tree_codes_after;
		}

		default:
			return TRUE;
	}


reenter_state_reading_num_lit_codes:

	if (ensureBitsContext(context, 5) == FALSE)
	{
		context->state = STATE_READING_NUM_LIT_CODES;
		return TRUE;
	}

	context->num_literal_codes		= getBits(context, 5) + 257;



reenter_state_reading_num_dist_codes:

	if (ensureBitsContext(context, 5) == FALSE)
	{
		context->state = STATE_READING_NUM_DIST_CODES;
		return TRUE;
	}

	context->num_dist_codes			= getBits(context, 5) + 1;



reenter_state_reading_num_code_length_codes:

	if (ensureBitsContext(context, 4) == FALSE)
	{
		context->state = STATE_READING_NUM_CODE_LENGTH_CODES;
		return TRUE;
	}

	context->num_code_length_codes	= getBits(context, 4) + 4;



	for (i = 0; i < context->num_code_length_codes; i++)
	{

reenter_state_reading_code_length_codes:

		if (ensureBitsContext(context, 3) == FALSE)
		{
			context->state = STATE_READING_CODE_LENGTH_CODES;
			context->state_loop_counter = i;
			return TRUE;
		}

		context->pretree_code_length[ g_CodeOrder[i] ] = (byte) getBits(context, 3);
	}

	for (i = context->num_code_length_codes; i < NUM_CODE_LENGTH_ORDER_CODES; i++)
		context->pretree_code_length[ g_CodeOrder[i] ] = 0;

	if (makeTable(
		NUM_PRETREE_ELEMENTS,
		PRETREE_TABLE_BITS,
		context->pretree_code_length,
		context->pretree_table,
		context->pretree_left,
		context->pretree_right
	) == FALSE)
	{
		return FALSE;
	}

	context->temp_code_array_size = context->num_literal_codes + context->num_dist_codes;


	for (i = 0; i < context->temp_code_array_size; )
	{

reenter_state_reading_tree_codes_before:

		_ASSERT(context->bitcount >= -16);

		if (context->bitcount == -16)
		{
			if (context->input_curpos >= context->end_input_buffer)
            {
    			context->state = STATE_READING_TREE_CODES_BEFORE;
	    		context->state_loop_counter = i;
                return TRUE;
            }

			context->bitbuf |= ((*context->input_curpos++) << (context->bitcount+16)); 
			context->bitcount += 8; 
		}

		code = decodePretreeElement(context);

        if (code < 0)
        {
			context->state = STATE_READING_TREE_CODES_BEFORE;
			context->state_loop_counter = i;
			return TRUE;
        }

reenter_state_reading_tree_codes_after:

		if (code <= 15)
		{
			context->temp_code_list[i++] = (unsigned char) code;
		}
		else
		{
			int		repeat_count, j;

			//
			// If the code is > 15 it means there is a repeat count of 2, 3, or 7 bits
			//
			if (ensureBitsContext(context, 7) == FALSE)
			{
				context->state = STATE_READING_TREE_CODES_AFTER;
				context->state_code = (unsigned char) code;
				context->state_loop_counter = i;
				return TRUE;
			}

			if (code == 16)
			{
				byte prev_code;

				// can't have "prev code" on first code
				if (i == 0)
					return FALSE;

				prev_code = context->temp_code_list[i-1];

				repeat_count = getBits(context, 2) + 3;

				if (i + repeat_count > context->temp_code_array_size)
					return FALSE;

				for (j = 0; j < repeat_count; j++)
					context->temp_code_list[i++] = prev_code;
			}
			else if (code == 17)
			{
				repeat_count = getBits(context, 3) + 3;

				if (i + repeat_count > context->temp_code_array_size)
					return FALSE;

				for (j = 0; j < repeat_count; j++)
					context->temp_code_list[i++] = 0;
			}
			else // code == 18
			{
				repeat_count = getBits(context, 7) + 11;

				if (i + repeat_count > context->temp_code_array_size)
					return FALSE;

				for (j = 0; j < repeat_count; j++)
					context->temp_code_list[i++] = 0;
			}
		}
	}

	//
	// Create literal and distance tables
	//
	memcpy(context->literal_tree_code_length, context->temp_code_list, context->num_literal_codes);

	for (i = context->num_literal_codes; i < MAX_LITERAL_TREE_ELEMENTS; i++)
		context->literal_tree_code_length[i] = 0;

	for (i = 0; i < context->num_dist_codes; i++)
		context->distance_tree_code_length[i] = context->temp_code_list[i + context->num_literal_codes];

	for (i = context->num_dist_codes; i < MAX_DIST_TREE_ELEMENTS; i++)
		context->distance_tree_code_length[i] = 0;

	//
	// Make sure there is an end-of-block code, otherwise how could we ever end?
	//
	if (context->literal_tree_code_length[END_OF_BLOCK_CODE] == 0)
		return FALSE;

	context->state = STATE_DECODE_TOP;

	return TRUE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区播放老司机| 日本韩国欧美在线| 99re66热这里只有精品3直播| 欧美亚洲动漫精品| 国产婷婷色一区二区三区四区| 一区二区在线观看视频在线观看| 久久国内精品自在自线400部| 91免费国产视频网站| 久久综合久久综合亚洲| 国产精品一区二区男女羞羞无遮挡| av亚洲产国偷v产偷v自拍| 精品久久久久久综合日本欧美| 一区二区三区日韩| 色综合欧美在线| 亚洲一区二区在线视频| 国产成人啪免费观看软件| 欧美日韩精品欧美日韩精品一| 一区视频在线播放| 成人一二三区视频| 久久精品免视看| 国产一区在线看| 日韩欧美在线观看一区二区三区| 亚洲高清不卡在线| 欧洲一区二区三区在线| 亚洲同性同志一二三专区| 国产精品一区二区久激情瑜伽| 精品久久免费看| 韩国av一区二区三区在线观看| 欧美吞精做爰啪啪高潮| 一区二区三区四区在线播放 | 性久久久久久久久久久久 | 亚洲欧美综合另类在线卡通| 久久精品国产精品亚洲精品| 欧美日韩国产系列| 一区二区三区国产豹纹内裤在线| 99国产精品久久久久久久久久| 国产精品家庭影院| 色综合久久久久综合99| 亚洲美女淫视频| 欧美性受xxxx黑人xyx性爽| 一区二区三区电影在线播| 欧美综合一区二区| 日韩精品一级中文字幕精品视频免费观看| 欧美日韩精品是欧美日韩精品| 亚洲电影一级片| 日韩欧美美女一区二区三区| 久久疯狂做爰流白浆xx| 国产亚洲欧美激情| 91视频免费看| 国产精品久久久一区麻豆最新章节| 激情五月婷婷综合网| 国产亚洲欧美激情| 97久久超碰国产精品| 亚洲在线中文字幕| 91精品一区二区三区在线观看| 久久国产精品无码网站| 亚洲成人动漫一区| 日韩女优电影在线观看| 国产 日韩 欧美大片| 亚洲精品免费播放| 欧美一级欧美三级| 成人免费高清视频在线观看| 亚洲一区国产视频| 久久久久久毛片| 91成人在线观看喷潮| 久久精工是国产品牌吗| 亚洲美女淫视频| 久久这里只有精品6| 在线中文字幕一区| 九九九久久久精品| 亚洲综合久久久久| 国产日韩一级二级三级| 欧美三级资源在线| 国产成人精品一区二| 亚洲综合免费观看高清完整版 | 国产原创一区二区| 亚洲乱码一区二区三区在线观看| 91精品国产综合久久香蕉麻豆| 成人综合婷婷国产精品久久免费| 污片在线观看一区二区 | 精品久久久久久久久久久久久久久久久| 从欧美一区二区三区| 日本麻豆一区二区三区视频| 亚洲美女屁股眼交| 色婷婷综合久久久中文一区二区 | 成人国产一区二区三区精品| 亚洲一区二区三区国产| 国产欧美一区二区精品秋霞影院 | 免费一区二区视频| 亚洲精品中文在线影院| 51精品秘密在线观看| 国产激情一区二区三区四区 | 91精品国产综合久久久蜜臀图片| 粉嫩aⅴ一区二区三区四区| 麻豆视频一区二区| 亚洲第一福利一区| 亚洲成人tv网| 伊人性伊人情综合网| 中文字幕在线播放不卡一区| 国产亚洲成aⅴ人片在线观看| 日韩精品最新网址| 欧美一区二区日韩一区二区| 欧美日韩国产高清一区二区 | 欧美日本一区二区| 欧美综合一区二区三区| 99re热视频精品| av成人免费在线观看| 国产999精品久久久久久| 国产一区激情在线| 国产在线观看免费一区| 老司机免费视频一区二区三区| 美腿丝袜在线亚洲一区| 美女视频黄 久久| 蜜臀91精品一区二区三区 | 欧美激情一区二区三区蜜桃视频 | 一区二区三区四区在线播放 | 日韩欧美不卡在线观看视频| 日韩一区二区在线免费观看| 日韩欧美一区二区在线视频| 日韩一区二区在线观看视频 | 91精品国产综合久久福利| 欧美久久久久久久久中文字幕| 欧美视频一区二区三区四区 | 93久久精品日日躁夜夜躁欧美| 99久久精品一区| 色94色欧美sute亚洲线路一ni| 色婷婷综合久久久| 欧美巨大另类极品videosbest| 91精选在线观看| 久久久久97国产精华液好用吗| 久久精品夜色噜噜亚洲a∨| 国产精品视频在线看| 亚洲欧美色图小说| 日韩国产一区二| 国产一区视频在线看| 99久久精品久久久久久清纯| 欧美一a一片一级一片| 91精品国产高清一区二区三区 | 亚洲精品在线三区| 国产欧美1区2区3区| 夜夜爽夜夜爽精品视频| 男人的j进女人的j一区| 风间由美一区二区三区在线观看| 99精品热视频| 91精品国产欧美一区二区成人| 欧美激情资源网| 亚洲国产精品久久不卡毛片| 激情图片小说一区| 91麻豆国产福利精品| 欧美一区二区三区在线观看| 日本强好片久久久久久aaa| 国产综合色精品一区二区三区| 97aⅴ精品视频一二三区| 欧美精品久久一区| 国产精品久久久久久亚洲伦| 午夜欧美在线一二页| 丁香激情综合国产| 欧美一级片在线观看| 国产精品久久久久久久久快鸭 | 色婷婷综合久久| 久久亚洲综合色一区二区三区| 亚洲欧洲制服丝袜| 国产在线精品不卡| 3d成人动漫网站| 亚洲免费电影在线| 91网站视频在线观看| 偷拍一区二区三区四区| 国产一本一道久久香蕉| 欧美日韩中文字幕一区| 亚洲精品在线三区| 午夜久久电影网| 一本久久综合亚洲鲁鲁五月天| 欧美成人一区二区三区| 亚洲综合网站在线观看| 成人午夜碰碰视频| 精品国产乱码久久久久久图片 | 一区二区三区在线观看视频| 国产一区二区按摩在线观看| 欧美日韩和欧美的一区二区| 亚洲丝袜制服诱惑| 盗摄精品av一区二区三区| 精品国产伦一区二区三区观看方式 | 欧美性生活一区| 国产精品国产三级国产有无不卡| 久久99精品国产.久久久久久| 欧美视频精品在线| 亚洲精品va在线观看| 99久久精品免费观看| 国产三级一区二区| 国产麻豆成人传媒免费观看| 日韩精品专区在线影院重磅| 五月天激情综合网| 欧美日韩一级二级| 亚洲一区二区三区在线看| 色噜噜狠狠色综合中国| 亚洲免费资源在线播放| 99久久免费精品| 亚洲欧美日韩国产成人精品影院 | 成人永久免费视频| 国产婷婷色一区二区三区四区 |