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

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

?? myset.cpp

?? 我的一個利用有限狀態機的正則表達式的實現。
?? CPP
字號:

#include "myreg.h"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define MIN_TEMP_SET_SPACE_SIZE 256

inline size_t get_set_hash_value( void** set, size_t count ) {
	return ( HASH_TABLE_SIZE -1 ) & 
	  ( ( (size_t)(set[0]) & 0x000000FF ) | 
		( (size_t)(set[count-1]) & 0xFF000000 ) |
		( (size_t)(set[ count/2 ]) & 0x00FFFF00 ) );
}

HASH_TABLE::LLNode* insert_set_obj( HASH_TABLE* hash_table, SET* s ) {

	size_t hash = get_set_hash_value( s->set, s->count );
	HASH_TABLE::LLNode* n = hash_table->table[hash].next;
	HASH_TABLE::LLNode* prev = &hash_table->table[hash];

	SET* ns = NULL;
	HASH_TABLE::LLNode* new_n = NULL;
	int cmp = 0;
	
	while( n ) {
		ns = (SET*) n->v;
		// sort according to the set::count
		
		if( ns->count > s->count ) {
			goto ADD_NEW_NODE;
			break;
		}
		// when count equal, sort according to set::set
		if( ns->count == s->count ) {
			cmp = memcmp( ns->set, s->set, sizeof(void*)*ns->count );
			// found a same node
			if ( cmp == 0 ) {
				new_n = n;
				goto END;			
			}
			if ( cmp > 0 ) {
				goto ADD_NEW_NODE;
			}
		}

		prev = n;
		n = n->next;
	}

ADD_NEW_NODE:

	new_n = (HASH_TABLE::LLNode*) malloc( sizeof( HASH_TABLE::LLNode ) );
	new_n->v = (void*) s;
	prev->next = new_n;
	new_n->next = n;

END:

	return new_n;
}

SET* find_set_obj( HASH_TABLE* hash_table, void** set, size_t count ) {

	size_t hash = get_set_hash_value( set, count );
	HASH_TABLE::LLNode* n = hash_table->table[hash].next;
	SET* ns = NULL;
	int cmp = 0;

	while( n ) {
		// compare the set
		ns = (SET*) n->v;
		if ( ns->count == count ) {
			cmp = memcmp( ns->set, set, sizeof(void*)*count );
			if ( cmp == 0 ) {
				// found
				return ns;
			}
			if ( cmp > 0 ) {
				return NULL;
			}
		}
		if ( ns->count > count ) {
			return NULL;
		}
		// next 
		n = n->next;
	}

	return NULL;
}


SET_FACTORY* initialize_set_factory() {

	SET_FACTORY* f = (SET_FACTORY*) malloc( sizeof(SET_FACTORY) );
	
	f->temp_set_space_size = MIN_TEMP_SET_SPACE_SIZE;
	f->temp_set_space = (void**) malloc( f->temp_set_space_size*sizeof( void* ) );

	f->set_hash_table = new_hash_table();

	return f;
}

void release_set( void* v ) {
	SET* s = (SET*) v;
	free( s->set );
}

void release_set_factory( SET_FACTORY* f ) {
	free( f->temp_set_space );
	release_hash_table( f->set_hash_table, release_set );	
}

SET_FACTORY* FACTORY = initialize_set_factory();

// new set which contains one element
SET* new_set( SET_FACTORY* factory,  void* n1 ) {
	void* list[] = { n1, NULL };
	return new_set( factory, list, 1 );
}

// new set which contains two element
SET* new_set( SET_FACTORY* factory,  void* n1, void* n2 ) {

	void* list[] = { NULL, NULL, NULL };
	if ( n1 > n2 ) {
		list[0] = n2;
		list[1] = n1;
	} else {
		list[0] = n1;
		list[1] = n2;
	}

	return new_set( factory, list, 2 );
}

// new set
SET* new_set( SET_FACTORY* factory, void** set, size_t count ) {

	if ( set == NULL ||  count == 0 ) {
		return NULL;
	}

	SET* s = find_set( factory, set, count );
	if ( s ) { return s; } // there is an existing set
	// create new set
	s = (SET*) malloc( sizeof(SET) );
	s->size = sizeof(void*)*count;
	s->count = count;
	s->set = (void**) malloc( sizeof(void*)*s->size );
	memcpy( s->set, set, count*sizeof(void*));
	// end by NULL
	s->set[s->count] = NULL;

	insert_set_obj( factory->set_hash_table, s );

	// PrintSet( s );
	return s;
}


// union two set
SET* union_set( SET_FACTORY* factory, SET* s1, SET* s2 ) {
	
	if( s2 == NULL ) { 
		// s2 is empty while s1 is not
		return s1; 
	}
	return union_set( factory, s1, s2->set, s2->count );	
}

// union a set and a sorted list
SET* union_set( SET_FACTORY* factory, SET* s1, void** set, size_t count ) {

	if ( s1 == NULL && ( set == NULL || count ==0 ) ) {
		// union two empty set
		return NULL;
	}

	if ( s1 == NULL ) {
		// s1 is empty while set is not
		return new_set( factory, set, count );
	}

	if ( set == NULL || count == 0 ) { 
		// set is empty whie s1 is not
		return s1; 
	}

	if ( factory->temp_set_space_size < s1->count + count ) { 
		// there might be over flowder
		factory->temp_set_space_size *= 2;
		factory->temp_set_space = (void**)realloc( factory->temp_set_space, sizeof(void*)*factory->temp_set_space_size );
	}

	void** w = factory->temp_set_space;
	int w_count = 0;
	void** r1 = s1->set;
	void** r2 = set;
	 
	// merge two set
	while( *r1 && *r2 ) {
		if ( *r1 <= *r2 ) {
			// write r1
			*w = *r1++;			
			// skip r2
			if ( *w == *r2 ) { r2 ++; }
		} else {
			// write r2
			*w = *r2;
			r2++;
		}
		w++;
	}

	while( *r1 ) {
		*w++ = *r1++;		
	}

	while( *r2 ) {
		*w++ = *r2++;		
	}

	w_count = w - factory->temp_set_space;

	return new_set( factory, factory->temp_set_space, w_count );

}

// find a set handler
SET* find_set( SET_FACTORY* factory, void** set, size_t count ) {
	return find_set_obj( factory->set_hash_table, set, count );
}

// print set to stdout
void PrintSet ( SET* s ) {
	if ( s ) {
		printf( "Set %x\nSize:%d\nCount:%d\n", s, s->size, s->count );
		REG_NODE** n = (REG_NODE**)s->set;
		while( *n ) {
			printf( "%x\n", *n++ );			
		}
	} else {
		printf( "Empty Set\n" );
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本中文字幕一区| 国产精品久久久爽爽爽麻豆色哟哟| 国产成人午夜片在线观看高清观看| 日本vs亚洲vs韩国一区三区二区 | 美女视频黄频大全不卡视频在线播放| 亚洲柠檬福利资源导航| 亚洲视频一区二区在线| 日韩理论片一区二区| 一区二区三区欧美| 亚洲小说春色综合另类电影| 亚洲午夜精品网| 午夜视频在线观看一区| 捆绑变态av一区二区三区| 久久99精品国产麻豆婷婷 | 国产欧美一区二区三区网站| 久久久久久综合| 亚洲视频免费看| 亚洲图片有声小说| 蜜桃一区二区三区在线观看| 国产一区二区中文字幕| 不卡在线视频中文字幕| 欧美日韩国产高清一区二区三区 | 日韩伦理av电影| 丝袜美腿一区二区三区| 久久99精品国产麻豆不卡| 国产·精品毛片| 欧美色男人天堂| 久久久久久亚洲综合影院红桃| 最新国产成人在线观看| 亚洲一区二区三区不卡国产欧美| 日韩av一区二区在线影视| 国产成人综合自拍| 欧美在线播放高清精品| 欧美成人vr18sexvr| 亚洲三级免费电影| 久国产精品韩国三级视频| 91在线观看成人| 欧美一区二区三区色| 中文一区一区三区高中清不卡| 一二三四社区欧美黄| 国产最新精品免费| 欧洲生活片亚洲生活在线观看| 久久先锋影音av鲁色资源网| 亚洲免费观看在线视频| 久久99久久99| 在线亚洲一区观看| 精品国产区一区| 亚洲电影一区二区| 国产乱人伦精品一区二区在线观看| 在线一区二区三区四区| 国产精品欧美久久久久一区二区| 视频在线观看国产精品| 菠萝蜜视频在线观看一区| 精品免费国产一区二区三区四区| 亚洲精品成人少妇| 国产精品一区二区在线观看不卡| 欧美男男青年gay1069videost| 国产精品美女久久久久久久久| 日本亚洲天堂网| 成人av动漫在线| 久久久久久久久久久久久久久99| 首页国产欧美久久| 色噜噜偷拍精品综合在线| 久久亚洲一区二区三区明星换脸| 午夜国产精品一区| 91麻豆文化传媒在线观看| 国产日韩欧美精品一区| 久久国产精品露脸对白| 欧美精品丝袜久久久中文字幕| 亚洲天堂2016| jiyouzz国产精品久久| 国产亚洲精品福利| 韩国一区二区视频| 337p日本欧洲亚洲大胆色噜噜| 天堂蜜桃91精品| 91精品国产全国免费观看| 一区二区日韩av| 欧美系列一区二区| 亚洲成年人网站在线观看| 在线一区二区三区四区五区| 一区二区三区在线播放| 91精品1区2区| 婷婷中文字幕一区三区| 欧美一级一级性生活免费录像| 日韩—二三区免费观看av| 欧美一区二区福利在线| 蜜桃一区二区三区四区| 久久九九久久九九| 国产精品123| 亚洲视频电影在线| 欧美亚洲禁片免费| 午夜一区二区三区视频| 日韩一二三四区| 国产成人一区二区精品非洲| 国产精品网曝门| 欧美日韩国产在线观看| 美腿丝袜在线亚洲一区 | **网站欧美大片在线观看| 91同城在线观看| 一区二区三区在线视频免费观看| 欧美日韩久久久久久| 男女视频一区二区| 国产欧美精品区一区二区三区| 99久久久免费精品国产一区二区| 亚洲国产裸拍裸体视频在线观看乱了| 777欧美精品| 成人性视频免费网站| 亚洲第一电影网| 久久亚洲免费视频| 欧美三级一区二区| 国产一区啦啦啦在线观看| 亚洲欧美偷拍三级| 日韩精品一区二区三区视频| 成人中文字幕合集| 日韩黄色免费电影| 国产精品九色蝌蚪自拍| 欧美精品色一区二区三区| 国产不卡在线一区| 免费观看日韩电影| 亚洲三级电影全部在线观看高清| 日韩一级大片在线观看| 91网上在线视频| 国产精品一二三区| 亚洲成人www| **欧美大码日韩| 久久久另类综合| 日韩女优视频免费观看| 欧洲在线/亚洲| 粉嫩高潮美女一区二区三区 | 精品久久人人做人人爰| 色视频一区二区| 成人网在线免费视频| 久久精品99国产国产精| 亚洲成av人综合在线观看| 国产精品国产自产拍在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧美日韩成人综合天天影院| 波多野结衣欧美| 国产成人免费视频精品含羞草妖精 | 色噜噜夜夜夜综合网| 成a人片国产精品| 国产·精品毛片| 国产大陆精品国产| 久久国产精品99精品国产 | 国产一区中文字幕| 日精品一区二区三区| 樱花草国产18久久久久| 欧美激情一区三区| 久久久亚洲午夜电影| 精品国产在天天线2019| 91精品国产欧美日韩| 欧美日韩黄视频| 欧美精品亚洲一区二区在线播放| 色欧美片视频在线观看| 色综合中文字幕国产 | 国产精品美女久久久久久久| 久久久久久免费网| 久久综合视频网| 日韩美女在线视频| 日韩精品一区二区三区视频播放| 欧美一区二区三级| 欧美一区二区大片| 日韩欧美国产一区二区三区| 精品人伦一区二区色婷婷| 精品88久久久久88久久久| 精品欧美黑人一区二区三区| 精品久久久久久亚洲综合网 | 亚洲成av人影院在线观看网| 午夜av电影一区| 麻豆精品一区二区| 国产成人亚洲综合a∨婷婷| 成人国产免费视频| 欧洲国内综合视频| 欧美日本一区二区三区四区| 日韩欧美综合一区| 久久你懂得1024| 亚洲三级电影网站| 日韩精品免费视频人成| 久久66热偷产精品| 99久久精品国产精品久久| 91久久线看在观草草青青| 欧美日韩国产一区二区三区地区| 欧美一区二区三区男人的天堂| 久久久久国产精品麻豆| 亚洲精品高清在线| 另类调教123区| 99国产精品国产精品久久| 欧美网站大全在线观看| 精品国产欧美一区二区| 夜色激情一区二区| 国内一区二区视频| 日本丶国产丶欧美色综合| 亚洲精品一区二区在线观看| 亚洲欧美日韩小说| 久久精品免费看| 欧美午夜一区二区三区| 国产色产综合产在线视频| 午夜欧美视频在线观看 | 欧美性感一区二区三区| 欧美精品一区二区久久婷婷|