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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fstenc.c

?? windows gzip source code
?? C
?? 第 1 頁 / 共 2 頁
字號:
				t_match_pos		next_match_pos;

				// sets search
				INSERT_STRING(search,bufpos);

				// no, so check for a better match at X+1
				if (search != 0)
				{
					next_match_len = FastEncoderFindMatch(
						window,
                        prev,
						bufpos, 
						search,
						&next_match_pos,
						match_len < good_length ? search_depth : (search_depth >> 2),
                        nice_length
					);
				
					// truncate match if we're too close to the end of the buffer
					// note: next_match_len could now be < MIN_MATCH
					if (bufpos + next_match_len > context->bufpos_end)
						next_match_len = context->bufpos_end - bufpos;
				}
				else
				{
					next_match_len = 0;
				}

				// right now X and X+1 are both inserted into the search tree
				if (next_match_len > match_len)
				{
					// since next_match_len > match_len, it can't be < MIN_MATCH here

					// match at X+1 is better, so output unmatched char at X
					OUTPUT_CHAR(window[bufpos-1]);

					// now output match at location X+1
					OUTPUT_MATCH(next_match_len, next_match_pos);

					// insert remainder of second match into search tree
					// 
					// example: (*=inserted already)
					//
					// X      X+1               X+2      X+3     X+4
					// *      *
					//        nextmatchlen=3
					//        bufpos
					//
					// If next_match_len == 3, we want to perform 2
					// insertions (at X+2 and X+3).  However, first we must 
					// inc bufpos.
					//
					bufpos++; // now points to X+2
					match_len = next_match_len;
					goto insert;
				}
				else
				{
					// match at X is better, so take it
					OUTPUT_MATCH(match_len, match_pos);

					//
					// Insert remainder of first match into search tree, minus the first
					// two locations, which were inserted by the FindMatch() calls.
					// 
					// For example, if match_len == 3, then we've inserted at X and X+1
					// already (and bufpos is now pointing at X+1), and now we need to insert 
					// only at X+2.
					//
					match_len--;
					bufpos++; // now bufpos points to X+2
					goto insert;
				}
			}
			else /* match_length >= good_match */
			{
				// in assertion: bufpos points to X+1, location X inserted already
					
				// first match is so good that we're not even going to check at X+1
				OUTPUT_MATCH(match_len, match_pos);

				// insert remainder of match at X into search tree
insert:
				if (context->bufpos_end - bufpos <= match_len)
				{
					bufpos += (match_len-1);
				}
				else
				{
   					while (--match_len > 0)
    				{
	    				t_match_pos ignore;

		    			INSERT_STRING(ignore,bufpos);
			    		bufpos++;
				    }
				}
			}
		}
	} /* end ... while (bufpos < bufpos_end) */

    // store local variables back in context
	context->bufpos = bufpos;
    context->bitbuf = bitbuf;
    context->bitcount = bitcount;
    context->output_curpos = output_curpos;

	VERIFY_HASHES(bufpos); // debugger: verify that hash table is correct

    if (bufpos == context->bufpos_end)
        context->state = STATE_NORMAL;
    else
        context->state = STATE_OUTPUTTING_BLOCK;

    // slide the window if bufpos has reached 2*window size
    if (context->bufpos == 2*FAST_ENCODER_WINDOW_SIZE)
        FastEncoderMoveWindows(context);
}


static void FastEncoderMoveWindows(t_encoder_context *context)
{
	t_search_node *lookup = context->fast_encoder->lookup;
	t_search_node *prev = context->fast_encoder->prev;
	BYTE *window = context->fast_encoder->window;
	int i;

    _ASSERT(context->bufpos == 2*FAST_ENCODER_WINDOW_SIZE);

    // verify that the hash table is correct
	VERIFY_HASHES(2*FAST_ENCODER_WINDOW_SIZE);

	memcpy(&window[0], &window[context->bufpos - FAST_ENCODER_WINDOW_SIZE], FAST_ENCODER_WINDOW_SIZE);

    // move all the hash pointers back
    // BUGBUG We are incurring a performance penalty since lookup[] is a USHORT array.  Would be
    // nice to subtract from two locations at a time.
	for (i = 0; i < FAST_ENCODER_HASH_TABLE_SIZE; i++)
	{
		long val = ((long) lookup[i]) - FAST_ENCODER_WINDOW_SIZE;

		if (val <= 0) // too far away now? then set to zero
			lookup[i] = (t_search_node) 0;
		else
			lookup[i] = (t_search_node) val;
	}

    // prev[]'s are absolute pointers, not relative pointers, so we have to move them back too
    // making prev[]'s into relative pointers poses problems of its own
	for (i = 0; i < FAST_ENCODER_WINDOW_SIZE; i++)
	{
		long val = ((long) prev[i]) - FAST_ENCODER_WINDOW_SIZE;

		if (val <= 0)
			prev[i] = (t_search_node) 0;
		else
			prev[i] = (t_search_node) val;
	}

#ifdef FULL_DEBUG
    // For debugging, wipe the window clean, so that if there is a bug in our hashing,
    // the hash pointers will now point to locations which are not valid for the hash value
    // (and will be caught by our ASSERTs).
	memset(&window[FAST_ENCODER_WINDOW_SIZE], 0, FAST_ENCODER_WINDOW_SIZE);
#endif

	VERIFY_HASHES(2*FAST_ENCODER_WINDOW_SIZE); // debug: verify hash table is correct

	context->bufpos = FAST_ENCODER_WINDOW_SIZE;
	context->bufpos_end = context->bufpos;
}


//
// Find match
//
// Returns match length found.  A match length < MIN_MATCH means no match was found.
//
static int FastEncoderFindMatch(
    const BYTE *    window, // window array
    const USHORT *  prev,   // prev ptr array
    long            bufpos, // current buffer position
    long            search, // where to start searching
    t_match_pos *   match_pos, // return match position here
    int             cutoff, // # links to traverse
    int             nice_length // stop immediately if we find a match >= nice_length
)
{
    // make local copies of context variables
	long			earliest;
	int				best_match = 0; // best match length found so far
	t_match_pos		l_match_pos; // absolute match position of best match found
    BYTE            want_char;

	_ASSERT(bufpos >= 0 && bufpos < 2*FAST_ENCODER_WINDOW_SIZE);
	_ASSERT(search < bufpos);
	_ASSERT(FAST_ENCODER_RECALCULATE_HASH(search) == FAST_ENCODER_RECALCULATE_HASH(bufpos));

    // the earliest we can look
	earliest = bufpos - FAST_ENCODER_WINDOW_SIZE;
    _ASSERT(earliest >= 0);

    // store window[bufpos + best_match]
    want_char = window[bufpos];

	while (search > earliest)
	{
        // make sure all our hash links are valid
		_ASSERT(FAST_ENCODER_RECALCULATE_HASH(search) == FAST_ENCODER_RECALCULATE_HASH(bufpos));

        // Start by checking the character that would allow us to increase the match
        // length by one.  This improves performance quite a bit.
		if (window[search + best_match] == want_char)
		{
			int j;

            // Now make sure that all the other characters are correct
			for (j = 0; j < MAX_MATCH; j++)
			{
				if (window[bufpos+j] != window[search+j])
					break;
			}
	
			if (j > best_match)
			{
				best_match	= j;
				l_match_pos	= search; // absolute position

				if (j > nice_length)
					break;

                want_char = window[bufpos+j];
			}
		}

		if (--cutoff == 0)
			break;

        // make sure we're always going backwards
        _ASSERT(prev[search & FAST_ENCODER_WINDOW_MASK] < search);

		search = (long) prev[search & FAST_ENCODER_WINDOW_MASK];
	}

    // doesn't necessarily mean we found a match; best_match could be > 0 and < MIN_MATCH
	*match_pos = bufpos - l_match_pos - 1; // convert absolute to relative position

    // don't allow match length 3's which are too far away to be worthwhile
	if (best_match == 3 && *match_pos >= FAST_ENCODER_MATCH3_DIST_THRESHOLD)
		return 0;

	_ASSERT(best_match < MIN_MATCH || *match_pos < FAST_ENCODER_WINDOW_SIZE);

	return best_match;
}


void FastEncoderReset(t_encoder_context *context)
{
	_ASSERT(context->fast_encoder != NULL);

    // zero hash table
	memset(context->fast_encoder->lookup, 0, sizeof(context->fast_encoder->lookup));

    context->window_size = FAST_ENCODER_WINDOW_SIZE;
	context->bufpos = FAST_ENCODER_WINDOW_SIZE;
    context->bufpos_end = context->bufpos;
    context->fast_encoder->fOutputBlockHeader = FALSE;
}


BOOL FastEncoderInit(t_encoder_context *context)
{
	context->fast_encoder = (t_fast_encoder *) LocalAlloc(LMEM_FIXED, sizeof(t_fast_encoder));

    if (context->fast_encoder == NULL)
        return FALSE;

	FastEncoderReset(context);
	return TRUE;
}


//
// Pregenerate the structure of the dynamic tree header which is output for
// the fast encoder.  Also record the final states of bitcount and bitbuf
// after outputting.
//
void FastEncoderGenerateDynamicTreeEncoding(void)
{
    t_encoder_context context;

    // Create a fake context with output pointers into our global data
    memset(&context, 0, sizeof(context));
    context.output_curpos = g_FastEncoderTreeStructureData;
    context.output_endpos = g_FastEncoderTreeStructureData + sizeof(g_FastEncoderTreeStructureData);
    context.output_near_end_threshold = context.output_endpos - 16;
    InitBitBuffer(&context);

    outputBits(&context, 1, 1); // "final" block flag
    outputBits(&context, 2, BLOCKTYPE_DYNAMIC);
   
    outputTreeStructure(
        &context,
	    g_FastEncoderLiteralTreeLength, 
	    g_FastEncoderDistanceTreeLength
    );

    g_FastEncoderTreeLength = (int) (context.output_curpos - (BYTE *) g_FastEncoderTreeStructureData);
    g_FastEncoderPostTreeBitbuf = context.bitbuf;
    g_FastEncoderPostTreeBitcount = context.bitcount;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区三区免费观看视频| caoporn国产精品| 欧美色网一区二区| 亚欧色一区w666天堂| 日韩欧美国产三级| 经典三级视频一区| 国产精品二区一区二区aⅴ污介绍| 成人免费视频网站在线观看| 亚洲色图欧美激情| 欧美丰满少妇xxxbbb| 裸体在线国模精品偷拍| 国产欧美日韩另类一区| 色综合咪咪久久| 秋霞午夜鲁丝一区二区老狼| 久久影视一区二区| 91亚洲精品久久久蜜桃网站| 亚洲一区二区欧美日韩| 日韩美女在线视频| 99在线精品观看| 日韩黄色片在线观看| 精品福利在线导航| 一本久久综合亚洲鲁鲁五月天| 日韩福利电影在线观看| 国产嫩草影院久久久久| 欧美日韩精品欧美日韩精品一| 精品一区二区久久久| 一区二区视频在线| 精品国产一区二区三区忘忧草 | 一区二区三区国产精品| 7878成人国产在线观看| 国产不卡视频在线播放| 五月婷婷久久丁香| 亚洲欧洲精品天堂一级| 日韩欧美国产wwwww| 欧洲色大大久久| 成人性生交大片免费| 日韩成人伦理电影在线观看| 国产精品久久久久久久久图文区| 91麻豆精品国产91久久久久| 91在线视频观看| 狠狠色丁香婷婷综合| 亚洲成人一区二区在线观看| 中文在线免费一区三区高中清不卡| 欧美精品色一区二区三区| 成人动漫中文字幕| 国产一区二区三区| 日本va欧美va欧美va精品| 亚洲欧美偷拍三级| 国产精品伦理在线| 久久免费精品国产久精品久久久久| 欧美精品久久一区| 在线观看亚洲成人| 日本精品一级二级| jizz一区二区| 成人网在线免费视频| 国产在线不卡视频| 久久国产精品第一页| 三级亚洲高清视频| 亚洲高清久久久| 一区二区三区欧美| 亚洲人xxxx| 亚洲欧洲日韩一区二区三区| 国产精品网曝门| 国产精品久久久久永久免费观看| 国产亚洲人成网站| 国产视频一区二区三区在线观看 | 久久av资源站| 欧美96一区二区免费视频| 婷婷综合五月天| 亚洲成人福利片| 五月婷婷欧美视频| 蜜桃一区二区三区在线| 日韩成人免费在线| 美国三级日本三级久久99| 天堂精品中文字幕在线| 五月婷婷综合激情| 日韩av一区二区三区四区| 日本视频中文字幕一区二区三区| 蜜桃视频第一区免费观看| 精东粉嫩av免费一区二区三区| 麻豆91在线播放免费| 激情五月激情综合网| 久久99热99| 粉嫩在线一区二区三区视频| 成人动漫一区二区三区| 91蜜桃网址入口| 欧美最猛黑人xxxxx猛交| 91.麻豆视频| 精品国产亚洲在线| 国产精品沙发午睡系列990531| 国产精品久久免费看| 亚洲一二三四区| 日本aⅴ亚洲精品中文乱码| 国产一区在线观看麻豆| 成人午夜av在线| 色悠悠亚洲一区二区| 91麻豆精品91久久久久久清纯 | 国产精品888| 91亚洲精品久久久蜜桃| 欧美日韩色一区| 精品国产成人在线影院| 中文字幕在线一区二区三区| 亚洲高清免费观看高清完整版在线观看 | 91在线云播放| 欧美一区二区视频在线观看2020 | 精品视频999| 欧美精品一区视频| 亚洲色图20p| 久久爱www久久做| 91片在线免费观看| 日韩欧美一区二区视频| 中文字幕国产一区| 日韩电影一区二区三区| 懂色av中文一区二区三区| 欧美色爱综合网| 久久精品一区蜜桃臀影院| 亚洲高清免费观看| 北条麻妃国产九九精品视频| 欧美日韩五月天| 国产精品国产a| 麻豆成人av在线| 91精品福利视频| 国产亚洲午夜高清国产拍精品| 亚洲成人免费看| av成人老司机| 国产欧美一区二区三区在线老狼| 日韩高清不卡一区二区三区| 波波电影院一区二区三区| 日韩亚洲欧美综合| 亚洲国产视频一区二区| 成人综合婷婷国产精品久久 | 国产精品1024久久| 51精品视频一区二区三区| 亚洲另类一区二区| 成人亚洲精品久久久久软件| 欧美电影免费观看高清完整版| 一区二区三区在线观看动漫| 成人禁用看黄a在线| 久久久久久日产精品| 奇米影视在线99精品| 欧美色视频在线观看| 亚洲精品免费视频| 成人精品小蝌蚪| 久久九九久久九九| 精品无码三级在线观看视频| 欧美一级在线观看| 视频精品一区二区| 欧美色倩网站大全免费| 亚洲免费在线视频一区 二区| 成人一区二区三区视频在线观看| 精品少妇一区二区三区视频免付费 | 日本不卡一二三| 欧美三级视频在线播放| 亚洲精品v日韩精品| 97精品久久久午夜一区二区三区| 国产亚洲成年网址在线观看| 国产乱码精品一区二区三| 久久噜噜亚洲综合| 国产久卡久卡久卡久卡视频精品| 日韩精品一区国产麻豆| 日本欧美在线观看| 日韩一级片网站| 免费观看一级特黄欧美大片| 欧美美女激情18p| 图片区小说区国产精品视频| 欧美电影在线免费观看| 日韩va亚洲va欧美va久久| 日韩一区二区三区电影在线观看 | 精品在线免费观看| 久久综合99re88久久爱| 国产精品1区2区3区在线观看| 亚洲精品在线一区二区| 国产在线一区二区综合免费视频| 久久久久久久久久看片| 成人一区二区三区中文字幕| 亚洲人吸女人奶水| 欧美体内she精高潮| 三级久久三级久久| 精品免费99久久| 成人国产精品免费观看动漫| 亚洲欧洲av色图| 欧美喷潮久久久xxxxx| 精品亚洲aⅴ乱码一区二区三区| 久久人人爽爽爽人久久久| 成人精品一区二区三区四区| 一区二区三区四区五区视频在线观看| 欧美日韩亚洲综合在线| 蜜桃视频在线观看一区二区| 久久九九99视频| 欧洲视频一区二区| 久久国产精品无码网站| 国产精品三级久久久久三级| 91福利国产精品| 久久99国产精品麻豆| 国产精品免费丝袜| 欧美久久婷婷综合色| 国产精品自在欧美一区| 亚洲精品国产无天堂网2021| 日韩免费观看高清完整版 | 91老司机福利 在线|