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

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

?? output.c

?? windows gzip source code
?? C
字號:
/*
 * output.c
 *
 * General outputting routines
 */
#include "deflate.h"
#include <string.h>
#include <stdio.h>
#include <crtdbg.h>


//
// Output an element from the pre-tree
//
#define OUTPUT_PRETREE_ELEMENT(element) \
	_ASSERT(pretree_len[element] != 0); \
	outputBits(context, pretree_len[element], pretree_code[element]);


//
// Output the tree structure for a dynamic block
//
void outputTreeStructure(t_encoder_context *context, const BYTE *literal_tree_len, const BYTE *dist_tree_len)
{
	int		hdist, hlit, combined_tree_elements, i, pass;
	USHORT	pretree_freq[NUM_PRETREE_ELEMENTS*2];
	USHORT	pretree_code[NUM_PRETREE_ELEMENTS];
	byte	pretree_len[NUM_PRETREE_ELEMENTS];

	//
	// combined literal + distance length code array for outputting the trees
	// in compressed form
	//
	// +3 is so we can overflow the array when performing run length encoding
	// (dummy values are inserted at the end so that run length encoding fails
	// before falling off the end of the array)
	//
	BYTE	lens[MAX_LITERAL_TREE_ELEMENTS + MAX_DIST_TREE_ELEMENTS + 3];

	//
	// Calculate HDIST
	//
	for (hdist = MAX_DIST_TREE_ELEMENTS - 1; hdist >= 1; hdist--)
	{
		if (dist_tree_len[hdist] != 0)
			break;
	}

	hdist++;

	//
	// Calculate HLIT
	//
	for (hlit = MAX_LITERAL_TREE_ELEMENTS - 1; hlit >= 257; hlit--)
	{
		if (literal_tree_len[hlit] != 0)
			break;
	}

	hlit++;

	//
	// Now initialise the array to have all of the hlit and hdist codes
	// in it
	//
	combined_tree_elements = hdist + hlit;

	memcpy(lens, literal_tree_len, hlit);
	memcpy(&lens[hlit], dist_tree_len, hdist);

	//
	// Stick in some dummy values at the end so that we don't overflow the 
	// array when comparing
	//
	for (i = combined_tree_elements; i < sizeof(lens); i++)
		lens[i] = -1;

	for (i = 0; i < NUM_PRETREE_ELEMENTS; i++)
		pretree_freq[i] = 0;

	//
	// Output the bitlengths in compressed (run length encoded) form.
	//
	// Make two passes; on the first pass count the various codes, create
	// the tree and output it, on the second pass output the codes using
	// the tree.
	//
	for (pass = 0; pass < 2; pass++)
	{
		int		cur_element;

		// are we outputting during this pass?
		BOOL	outputting = (pass == 1); 

		cur_element = 0;

		while (cur_element < combined_tree_elements)
		{
			int curlen = lens[cur_element];
			int run_length;

			//
			// See how many consecutive elements have the same value
			//
			// This won't run off the end of the array; it will hit the -1's
			// we stored there
			//
			for (run_length = cur_element+1; lens[run_length] == curlen; run_length++)
				;

			run_length -= cur_element;

			//
			// For non-zero codes need 4 identical in a row (original code
			// plus 3 repeats).  We decrement the run_length by one if the
			// code is not zero, since we don't count the first (original)
			// code in this case.
			//
			// For zero codes, need 3 zeroes in a row.
			//
			if (curlen != 0)
				run_length--;

			if (run_length < 3)
			{
				if (outputting)
				{
					OUTPUT_PRETREE_ELEMENT(curlen);
				}
				else
					pretree_freq[curlen]++;

				cur_element++;
			}
			else 
			{
				//
				// Elements with zero values are encoded specially
				//
				if (curlen == 0)
				{
					//
					// Do we use code 17 (3-10 repeated zeroes) or 
					// code 18 (11-138 repeated zeroes)?
					//
					if (run_length <= 10)
					{
						// code 17
						if (outputting)
						{
							OUTPUT_PRETREE_ELEMENT(17);
							outputBits(context, 3, run_length - 3);
						}
						else
						{
							pretree_freq[17]++;
						}
					}
					else
					{
						// code 18
						if (run_length > 138)
							run_length = 138;

						if (outputting)
						{
							OUTPUT_PRETREE_ELEMENT(18);
							outputBits(context, 7, run_length - 11);
						}
						else
						{
							pretree_freq[18]++;
						}
					}  

					cur_element += run_length;
				}
				else
				{
					//
					// Number of lengths actually encoded.  This may end up 
					// being less than run_length if we have a run length of
					// 7 (6 + 1 [which cannot be encoded with a code 16])
					//
					int run_length_encoded = 0;

					// curlen != 0

					// can output 3...6 repeats of a non-zero code, so split
					// longer runs into short ones (if possible)

					// remember to output the code itself first!
					if (outputting)
					{
						OUTPUT_PRETREE_ELEMENT(curlen);

						while (run_length >= 3)
						{
							int this_run = (run_length <= 6) ? run_length : 6;

							OUTPUT_PRETREE_ELEMENT(16);
							outputBits(context, 2, this_run - 3);

							run_length_encoded += this_run;
							run_length -= this_run;
						}
					}
					else
					{
						pretree_freq[curlen]++;

						while (run_length >= 3)
						{
							int this_run = (run_length <= 6) ? run_length : 6;

							pretree_freq[16]++;

							run_length_encoded += this_run;
							run_length -= this_run;
						}
					}

					// +1 for the original code itself
					cur_element += (run_length_encoded+1);
				}
			}
		}

		//
		// If this is the first pass, create the pretree from the
		// frequency data and output it, as well as the values of
		// HLIT, HDIST, HDCLEN (# pretree codes used)
		//
		if (pass == 0)
		{
			int hclen, i;

			makeTree(
				NUM_PRETREE_ELEMENTS,
				7, 
				pretree_freq, 
				pretree_code,
				pretree_len
			);

			//
			// Calculate HCLEN
			//
			for (hclen = NUM_PRETREE_ELEMENTS-1; hclen >= 4; hclen--)
			{
				if (pretree_len[ g_CodeOrder[hclen] ] != 0)
					break;
			}
			
			hclen++;

			//
			// Dynamic block header
			//
			outputBits(context, 5, hlit - 257);
			outputBits(context, 5, hdist - 1);
			outputBits(context, 4, hclen - 4);

			for (i = 0; i < hclen; i++)
			{
				outputBits(context, 3, pretree_len[g_CodeOrder[i]]);
			}
		}
	}
}


//
// bitwise i/o
//
void flushOutputBitBuffer(t_encoder_context *context)
{
	if (context->bitcount > 0)
	{
		int prev_bitcount = context->bitcount;
			
		outputBits(context, 16 - context->bitcount, 0);

		// backtrack if we have to; ZIP is byte aligned, not 16-bit word aligned
		if (prev_bitcount <= 8)
			context->output_curpos--;
	}
}


//
// Does not check for output overflow, so make sure to call checkOutputOverflow()
// often enough!
//
void outputBits(t_encoder_context *context, int n, int x)
{
	_ASSERT(context->output_curpos < context->output_endpos-1);
    _ASSERT(n > 0 && n <= 16);

	context->bitbuf |= (x << context->bitcount);
	context->bitcount += n;

	if (context->bitcount >= 16)                     
	{   
		*context->output_curpos++ = (BYTE) context->bitbuf;
		*context->output_curpos++ = (BYTE) (context->bitbuf >> 8);

		context->bitbuf >>= 16;
		context->bitcount -= 16;                         
	} 
}


// initialise the bit buffer
void InitBitBuffer(t_encoder_context *context)
{
	context->bitbuf		= 0;
	context->bitcount	= 0;
}


void OutputBlock(t_encoder_context *context)
{
    _ASSERT(context->std_encoder != NULL || context->optimal_encoder != NULL);
    
    // we never call OutputBlock() with the fast encoder
    _ASSERT(context->fast_encoder == NULL);

    if (context->std_encoder != NULL)
	    StdEncoderOutputBlock(context);
    else if (context->optimal_encoder != NULL)
        OptimalEncoderOutputBlock(context);
}


void FlushRecordingBuffer(t_encoder_context *context)
{
    _ASSERT(context->std_encoder != NULL || context->optimal_encoder != NULL);
    _ASSERT(context->fast_encoder == NULL); // fast encoder does not record

    if (context->std_encoder != NULL)
    {
        *context->std_encoder->recording_bufptr++ = (BYTE) context->std_encoder->recording_bitbuf; 
		*context->std_encoder->recording_bufptr++ = (BYTE) (context->std_encoder->recording_bitbuf >> 8); 
    }
    else if (context->optimal_encoder != NULL)
    {
        *context->optimal_encoder->recording_bufptr++ = (BYTE) context->optimal_encoder->recording_bitbuf; 
	    *context->optimal_encoder->recording_bufptr++ = (BYTE) (context->optimal_encoder->recording_bitbuf >> 8); 
    }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩午夜av一区| 亚洲精选视频在线| 中文字幕一区二区三区蜜月 | 久久久亚洲精品一区二区三区| 国产欧美日韩三级| 偷拍亚洲欧洲综合| 91丨porny丨蝌蚪视频| 日韩欧美专区在线| 亚洲综合在线观看视频| 成人午夜免费视频| 欧美v日韩v国产v| 亚洲成人先锋电影| 一本大道av一区二区在线播放| 精品久久久久久久久久久院品网| 亚洲线精品一区二区三区八戒| 成人免费毛片a| 久久免费视频色| 狠狠色狠狠色综合日日91app| 欧美久久久久久久久久| 依依成人精品视频| 91丝袜美女网| ...中文天堂在线一区| 国产乱子轮精品视频| 欧美成人女星排名| 久久精品国产精品亚洲红杏 | 波多野结衣中文字幕一区二区三区 | 国产精品一二三在| 9191精品国产综合久久久久久| 日韩理论片网站| 成人ar影院免费观看视频| 久久精品欧美一区二区三区麻豆| 久久成人18免费观看| 欧美tk丨vk视频| 美国毛片一区二区三区| 欧美日韩精品一区二区三区四区 | 日韩精品欧美精品| 欧美肥胖老妇做爰| 美女任你摸久久| 精品国产一区二区在线观看| 精品一区二区三区视频在线观看| 欧美一级夜夜爽| 精品无人码麻豆乱码1区2区| 久久综合九色综合欧美98| 国产曰批免费观看久久久| 国产亚洲一二三区| 99久久精品免费看国产| 亚洲一区二区视频在线| 欧美一区二区在线看| 精品一区二区三区在线观看国产| 欧美va亚洲va| www.欧美日韩国产在线| 亚洲欧洲性图库| 欧洲一区二区av| 日韩av不卡在线观看| 精品电影一区二区| 成人性视频网站| 亚洲精品综合在线| 欧美日韩精品二区第二页| 久久精品国产网站| 欧美激情综合五月色丁香| 色综合久久综合中文综合网| 日韩国产精品久久久久久亚洲| 精品国产一区二区三区av性色 | 国产免费久久精品| 日本丶国产丶欧美色综合| 日韩和欧美的一区| 欧美激情在线观看视频免费| 色94色欧美sute亚洲线路一久| 日韩av中文字幕一区二区| 亚洲国产成人在线| 欧美日韩精品久久久| 国产成人免费视频网站高清观看视频| 亚洲欧美一区二区在线观看| 欧美理论电影在线| 不卡的av网站| 久久国产生活片100| 亚洲人成伊人成综合网小说| 欧美一区二区成人| 一本色道久久加勒比精品| 久久99精品国产91久久来源| 亚洲最色的网站| 国产亚洲短视频| 日韩一区二区电影| 色综合久久综合网欧美综合网| 国产一区二区福利视频| 丝袜美腿一区二区三区| 国产调教视频一区| 日韩亚洲欧美中文三级| 色哟哟在线观看一区二区三区| 精品午夜久久福利影院| 丝袜a∨在线一区二区三区不卡| 中文字幕第一区二区| 精品福利一区二区三区| 欧美日韩国产小视频在线观看| 成人av在线一区二区三区| 奇米888四色在线精品| 亚洲精品中文字幕在线观看| 精品99一区二区| 欧美久久久久久久久久| 欧美色网站导航| 色综合欧美在线视频区| 91在线无精精品入口| 国产精品综合视频| 狠狠色2019综合网| 精油按摩中文字幕久久| 蜜臀av一区二区在线免费观看| 亚洲在线观看免费| 亚洲成人精品影院| 亚洲国产欧美日韩另类综合| 亚洲欧美偷拍卡通变态| 亚洲婷婷综合色高清在线| 国产欧美日韩亚州综合| 国产亚洲短视频| 国产精品午夜电影| 国产精品久久久久久一区二区三区 | 日韩美女视频一区二区| 国产人成亚洲第一网站在线播放| 精品国产乱码久久久久久图片 | 欧美日韩日日骚| 欧美三级日本三级少妇99| 色久综合一二码| 在线精品观看国产| 欧美性xxxxxx少妇| 4438x成人网最大色成网站| 欧美嫩在线观看| 日韩一区二区三区在线视频| 日韩三级免费观看| 久久综合久久鬼色中文字| 国产午夜精品久久久久久免费视| 欧美国产日韩一二三区| 亚洲免费在线观看| 一区二区三区国产精华| 午夜精品福利一区二区蜜股av | 国产精品福利电影一区二区三区四区| 久久精品一区二区三区不卡| 国产精品全国免费观看高清| 国产精品福利电影一区二区三区四区| 亚洲精品视频观看| 日韩电影在线一区| 国产乱码精品一区二区三区五月婷| 风间由美中文字幕在线看视频国产欧美| 国产成人夜色高潮福利影视| 99久久免费视频.com| 欧美另类久久久品| 亚洲精品在线三区| 1024精品合集| 久久精品国产精品亚洲红杏| av电影在线不卡| 欧美日韩免费电影| 日本一区二区三区国色天香| 一区二区成人在线观看| 久久99精品久久久| 色综合久久88色综合天天6| 欧美一区二区视频在线观看2020| 久久久精品中文字幕麻豆发布| 综合av第一页| 另类综合日韩欧美亚洲| 色综合久久中文字幕| 欧美精品一区男女天堂| 中文字幕在线不卡视频| 亚洲自拍偷拍图区| 国产91丝袜在线18| 欧美日韩免费在线视频| 中文字幕精品一区| 青青草国产成人99久久| 91久久国产最好的精华液| 久久精品人人做人人综合| 亚洲成人久久影院| 色综合中文字幕| 国产日韩v精品一区二区| 首页亚洲欧美制服丝腿| 色婷婷国产精品久久包臀| 国产午夜亚洲精品不卡| 日韩av二区在线播放| 91成人免费网站| 国产精品成人在线观看| 久草在线在线精品观看| 欧美视频日韩视频在线观看| 亚洲人成电影网站色mp4| 国产成都精品91一区二区三| 日韩一区二区不卡| 天堂在线一区二区| 欧美色区777第一页| 亚洲欧美一区二区三区国产精品 | 亚洲蜜臀av乱码久久精品蜜桃| 国产精品综合视频| 久久一区二区三区国产精品| 日韩高清国产一区在线| 欧美顶级少妇做爰| 午夜精品一区二区三区免费视频 | 亚洲国产电影在线观看| 国产激情一区二区三区| 久久久久久久久岛国免费| 麻豆中文一区二区| 精品国产亚洲在线| 国产最新精品精品你懂的| 久久综合av免费| 国产69精品一区二区亚洲孕妇 | 国产一本一道久久香蕉| 精品成人一区二区|