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

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

?? c_index.cpp

?? HP共享內(nèi)存實現(xiàn),只要將sql語句配置好,裝載共享內(nèi)存即可
?? CPP
字號:
/***********************************************************************
 * Module:  c_index.cpp
 * Author:  Administrator
 * Modified: 2005年9月15日 15:40:43
 * Purpose: Implementation of the class c_index
 * Comment: 用于對共享內(nèi)存中的數(shù)據(jù)建立索引。 并利用索引進(jìn)行查詢。
 找到所需的數(shù)據(jù). 索引是基于共享內(nèi)存而存在的。
 共享內(nèi)存在使用時, 只要同索引類打交道即可. 更新索引的時間由各個使用者自行確定。 
 ***********************************************************************/

#include "c_shm_mem.h"
#include "c_index.h"


//表示是全局變量.用于指示字段信息
INDEX_KEY_INFO g_index_key[MAX_INDEX_COUNT];
int index_no = 0;  
int index_count = 0;
c_buf  g_buf[MAX_INDEX_COUNT];
c_buf g_list_buf[MAX_INDEX_COUNT];

int c_list::append(int a ) 
{	
	if( record_count == 0 )	
	{		
//		next = NULL;		
		data = a;	
	}	
	else	
	{		
		c_list* temp_point = (c_list*)g_list_buf[index_no].getSpace();
		temp_point->data = a;
		if( next != NULL )
			temp_point->record_count = next->record_count + 1;
		else
			temp_point->record_count = 1;
		temp_point->next = next;
		next = temp_point;	
	}
	record_count++;	
	return 0;
}

int c_list::del( int seq )
{
	if( seq >= record_count || seq < 0 ) 
	{
		printf("沒有這個序號的數(shù)據(jù)!");
		return -1;
	}
	int i;
	c_list* temp_point;
	c_list* delete_point;
	if( seq == 0 )
	{
		temp_point = next;
		next = temp_point->next;
		data = temp_point->data;
	}
	else if(seq == 1)
	{
		temp_point = next;
		next = temp_point->next;
	}
	else
	{
		temp_point = next;
		for ( i = 1; i < seq - 1; i ++ )
		{
			temp_point = temp_point->next;
		}
		//刪除
		delete_point = temp_point->next;
		temp_point->next = delete_point->next;
	}
	//釋放內(nèi)存
	record_count--;	
	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_index::createIndex()
// Purpose:    Implementation of c_index::createIndex()
// Return:     int
////////////////////////////////////////////////////////////////////////
void c_index::appendKeySeq(int c, int app)
{
	if( app == 0 )
	{
		for( int i = 0 ; i < keySeq.size(); i++ )
			shm_mem->deleteKey( keySeq[i] );

		keySeq.clear();
		g_index_key[index_no].key_count = 0;
	}

	shm_mem->addKey( c );
//同時更新g_index_key
	memcpy( &(g_index_key[index_no].field_info[g_index_key[index_no].key_count]), &(shm_mem->p_field_info[c]),  sizeof(MEM_FIELD) );
//重置field_pos
	if( g_index_key[index_no].key_count == 0 )
		g_index_key[index_no].field_info[g_index_key[index_no].key_count].field_pos  = 0;
	else
		g_index_key[index_no].field_info[g_index_key[index_no].key_count].field_pos = 
		g_index_key[index_no].field_info[g_index_key[index_no].key_count-1].field_pos + g_index_key[index_no].field_info[g_index_key[index_no].key_count-1].field_size;

//key值大小
	g_index_key[index_no].key_size = g_index_key[index_no].field_info[g_index_key[index_no].key_count].field_pos + g_index_key[index_no].field_info[g_index_key[index_no].key_count].field_size ;
	g_index_key[index_no].key_count++;


//設(shè)置buf的參數(shù)
	g_index_key[index_no].m_buf.record_size = g_index_key[index_no].key_size;
	g_index_key[index_no].m_buf.unit = 100;

	g_buf[index_no].record_size = g_index_key[index_no].key_size;
	g_buf[index_no].unit = 10;

	keySeq.push_back(c );
}

void c_index::test()
{
	INDEX_VALUE t_index[5800];
	int i;
	char *p_field, *p_element;

	int field_seq;
	int j  = 0;
	for( i = 0; i < shm_mem->p_stShareInfo->real_record_count && i < 5800 ; i ++ )
	{
        p_element = shm_mem->getElement( i );
//測試, 打印出各個字段的值


//構(gòu)造t_index
		cout<<i<<endl;
		//if( i % 10000  == 0 )  cout<<i<<endl;
		for( field_seq = 0; field_seq< keySeq.size();  field_seq++ )
		{
//			t_index[j].key.setData( field_seq, (char*)p_element + shm_mem->p_field_info[keySeq[field_seq] ].field_pos );
			t_index[j].key.setData( field_seq, p_element + shm_mem->p_field_info[keySeq[field_seq] ].field_pos );
			j++;
		}

		if( i > 579000 )
			break;
	}
	cout<<"索引數(shù)組大小為:"<<sizeof(t_index)<<endl;
	cout<<"單個大小為:"<<sizeof(INDEX_VALUE)<<endl;
	cout<<"關(guān)鍵字類大小為:"<<sizeof(c_key_value)<<endl;
	g_buf[index_no].display();
}

void c_index::createIndex( int begin_no, int end_no )
{
	INDEX_VALUE t_index;

	int field_seq;
//先第一條記錄
//對共享內(nèi)存進(jìn)行遍歷一次
	void *p_field, *p_element;
	char out_value[30];

	int i;
//取得記錄數(shù)
	for( i = begin_no; i < end_no; i ++ )
	{
        p_element = shm_mem->getElement( i );
		if ( p_element == NULL )
		{
			continue;
		}

//構(gòu)造t_index
		for( field_seq = 0; field_seq< keySeq.size();  field_seq++ )
		{
			t_index.key.setData( field_seq, (char*)p_element + shm_mem->p_field_info[keySeq[field_seq] ].field_pos );
		}

		//要在set中插入一條記錄
		pr = index_tree.insert( t_index );
		INDEX_VALUE& ss = (INDEX_VALUE&)(*pr.first);
		ss.record_seq.append(i);
		//pp->append(i);
		//if( i%100000==0 )
		//	cout<<i<<endl;

		if( singal_terminate.isTerminated() )
		{
			g_buf[index_no].recvSpace();
			cout<<"程序終止!"<<endl;
			singal_terminate.kill();
		}
	}
//收回空間
	g_buf[index_no].recvSpace();
}


//創(chuàng)建索引
int c_index::createIndex(void)
{
   // TODO : implement
	index_record_count = shm_mem->getRecordCount();
	cout<<"共享內(nèi)存記錄數(shù)為:"<<index_record_count<<endl;
	createIndex( 0, index_record_count );
	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_index::find(c_key_value* key)
// Purpose:    Implementation of c_index::find()
// Comment:    返回在共享內(nèi)存中的一個seq. 即記錄序號或位置
// Parameters:
// - key
// Return:     int
////////////////////////////////////////////////////////////////////////

//設(shè)置key_v的一些屬性
void c_index::getKeyValue( c_key_value& key_v )
{

}

const c_list* c_index::find(c_key_value& key)
{
//更新索引
	updateIndex();
   // TODO : implement
	SET_INDEX_TREE::const_iterator  iter_index;

	INDEX_VALUE t_index;
	t_index.key =  key;   //需增加該函數(shù)
	iter_index = index_tree.find( t_index );
	g_buf[index_no].recvSpace();
	
	if( iter_index != index_tree.end() )
	{
//將其序列打印出來
#ifdef _DEBUG
		//cout<<"找到:"<<iter_index->key.buf<<endl;
		const c_list* p_list1 = &(iter_index->record_seq);
		cout<<"tmp "<<p_list1->data<<endl;
		cout<<"序號為:"<<iter_index->record_seq.data<<'\t';
		c_list* p_list = iter_index->record_seq.next;
		
		int i = 0;
		while( p_list != NULL )
		{
			cout<<p_list->data<<'\t';
			p_list = p_list->next;
			i ++;
			if( i >= 30 )
				break;
		}
		cout<<endl;
#endif
		return &(iter_index->record_seq);
		//return iter_index->record_seq.next;
	}
	else
	{
		return NULL;
	}
//空間回收
}


////////////////////////////////////////////////////////////////////////
// Name:       c_index::updateIndex()
// Purpose:    Implementation of c_index::updateIndex()
// Return:     int
////////////////////////////////////////////////////////////////////////

int c_index::updateIndex(void)
{
   // TODO : implement
//當(dāng)記錄數(shù)發(fā)生改變時, 要進(jìn)行索引更新
	int t_count = shm_mem->getRecordCount();
	if( t_count != index_record_count )
	{
		createIndex( index_record_count, t_count );
		index_record_count = t_count;
	}

	return 0;
}

////////////////////////////////////////////////////////////////////////
// Name:       c_index::nextElement()
// Purpose:    Implementation of c_index::nextElement()
// Return:     void*
// p_data為返回的元素的指針
////////////////////////////////////////////////////////////////////////

const c_list* c_index::nextElement( const c_list* p_list )
{
   // TODO : implement
	if( p_list == NULL )
	{
		return NULL;
	}
	return p_list->next;
}


void* c_index::getField( int record_no, int field_seq )
{
	if( shm_mem->p_field_info[field_seq].field_size == -1 )
	{
		void* p_element = shm_mem->getElement( record_no );		
		if(shm_mem->getFieldValue(field_seq, &add_value[0] ) == 0 )
			return &add_value[0];
		else
			return NULL;
	}
	else
	{
		void* p_element = shm_mem->getElement( record_no );
		return (char*)p_element + shm_mem->p_field_info[field_seq].field_pos;
	}
}

void c_index::display( int seq )
{
	char out[200];
	int out_i;

	shm_mem->getElement(seq );
	for(int i = 0; i< shm_mem->p_share_mem_info->field_count; i++ )
	{
		switch( shm_mem->p_field_info[i].field_type )
		{
		case 1:
			shm_mem->getFieldValue( i, out );
			cout<<out<<endl;
			break;
		case 2:
			shm_mem->getFieldIntValue(i, &out_i );
			cout<<out_i<<endl;
			break;
		case 3:
			break;
		default:
			shm_mem->getFieldValue( i, out );
			cout<<out<<endl;
			break;
		}

	}
}

void c_index::recvSpace()
{
//如果該索引不用了, 可以將其釋放掉
	g_index_key[index_no].m_buf.release();
	g_buf[index_no].release();
	g_list_buf[index_no].release();
//將set釋放掉
	index_tree.clear();
//將key值去掉
	for( int i = 0 ; i < keySeq.size(); i++ )
		shm_mem->deleteKey( keySeq[i] );

}


//2006-03-12
void c_index::createIndex(bool (*p_func)(c_index*, char*))
{
	index_record_count = shm_mem->getRecordCount();
	cout<<"共享內(nèi)存記錄數(shù)為:"<<index_record_count<<endl;
	createIndex( 0, index_record_count, p_func );
	return ;
}

void c_index::createIndex( int begin_no, int end_no, bool (*p_func)(c_index*, char*) )
{
	INDEX_VALUE t_index;

	int field_seq;
//先第一條記錄
//對共享內(nèi)存進(jìn)行遍歷一次
	void *p_field, *p_element;
	char out_value[30];

	int i;
//取得記錄數(shù)
	for( i = begin_no; i < end_no; i ++ )
	{
        p_element = shm_mem->getElement( i );
		if ( p_element == NULL )
		{
			continue;
		}

		//判斷是否滿足條件,滿足才可以繼續(xù)
		if ( !p_func(this, (char*)p_element) ) 
		{
			continue;
		}

		//構(gòu)造t_index
		for( field_seq = 0; field_seq< keySeq.size();  field_seq++ )
		{
			t_index.key.setData( field_seq, (char*)p_element + shm_mem->p_field_info[keySeq[field_seq] ].field_pos );
		}

		//要在set中插入一條記錄
		t_index.record_seq.append(i);
		pr = index_tree.insert( t_index );
		//pr.first->record_seq.append(i);

		if( singal_terminate.isTerminated() )
		{
			g_buf[index_no].recvSpace();
			cout<<"程序終止!"<<endl;
			singal_terminate.kill();
		}
	}

//收回空間
	g_buf[index_no].recvSpace();
	return;
}

int c_index::getKeySeqByAttrName( const char* event_attr_name )
{
	int seq = shm_mem->getFieldSeqByAttrName( event_attr_name );
	if( seq < 0 )
	{
		return -1;
	}
	else
	{
		for ( int i = 0 ; i < keySeq.size() ; i ++ )
		{
			if ( keySeq[i] == seq )
			{
				return i;
			}
		}
	}
	return -1;
}

//添加一個索引
INDEX_MANAGER* c_index_manager::appendIndex()
{
	if( index_count >= MAX_INDEX_COUNT )
	{
		cout<<"錯誤: 超過最大索引數(shù), 最大為:"<<MAX_INDEX_COUNT<<endl;
		return NULL;
	}

	INDEX_MANAGER t_manager;
	t_manager.m_index = new c_index();
	t_manager.g_buf = &g_buf[index_count];
	t_manager.m_key_info = &g_index_key[index_count];
	t_manager.m_list_buf = &g_list_buf[index_count];
//置上索引序列, 以便于跟蹤
	t_manager.m_index_no = index_count;

	t_manager.m_list_buf->record_size = sizeof( c_list );
	t_manager.m_list_buf->unit = 100;

	index_no = index_count;
	index_count++;
	index_group.push_back( t_manager );
//建立關(guān)鍵字類型
//	index_group[index_count-1].m_key = new c_key_value();

	return &index_group[index_count-1];
}

INDEX_MANAGER* c_index_manager::appendIndex(const char* mem_name, string p_key[], const int key_size)
{
	c_shm_mem* p_shm_mem = c_shm::getInstPtr()->get_mem( mem_name );
	if( p_shm_mem == NULL )
	{
		cout<<"沒有找到該塊共享內(nèi)存:"<<mem_name<<endl;
		exit(1);
	}

	return appendIndex( p_shm_mem, p_key,  key_size);
}


INDEX_MANAGER* c_index_manager::appendIndex(c_shm_mem* p_shm_mem, string p_key[], const int key_size)
{
	if( index_count >= MAX_INDEX_COUNT )
	{
		cout<<"錯誤: 超過最大索引數(shù), 最大為:"<<MAX_INDEX_COUNT<<endl;
		return NULL;
	}

	int jj = 0;
	string index_str = p_shm_mem->p_share_mem_info->mem_name;
	for( jj = 0;  jj < key_size; jj++ )
	{
		index_str += p_key[jj];
	}
	
	for( jj = 0; jj < indexString.size(); jj++ )
	{
		if( strcmp( index_str.c_str(), 	indexString[jj].index_string ) == 0 )
		{
			index_group[jj].refer_count++;
			return &index_group[jj];
		}
	}
	
	INDEX_MANAGER t_manager;
	t_manager.m_index = new c_index();
	t_manager.refer_count = 0;
	t_manager.g_buf = &g_buf[index_count];
	t_manager.m_key_info = &g_index_key[index_count];
	t_manager.m_list_buf = &g_list_buf[index_count];
//置上索引序列, 以便于跟蹤
	t_manager.m_index_no = index_count;

	t_manager.m_list_buf->record_size = sizeof( c_list );
	t_manager.m_list_buf->unit = 100;

	index_no = index_count;
	
	//設(shè)置共享內(nèi)存和key
	t_manager.setShm( p_shm_mem );

	if( key_size == 0 )
	{
		printf("沒有設(shè)置索引主鍵\n"); fflush(stdout);
		return NULL;
	}
	else
	{
		int i = 0; 
		for( i = 0; i < key_size; i++ )
		{
			int field_seq = p_shm_mem->getFieldSeqByAttrName( p_key[i].c_str() );
			if( field_seq < 0 )
			{
				cout<<p_key[i].c_str()<<"該字段不存在,請檢查"<<endl;
				exit(1);
			}
			else
			{
				t_manager.appendKey( field_seq );
			}
		}
	}

	t_manager.initKey();
	t_manager.m_index->createIndex();

	index_count++;

	INDEX_STRING t_index_str;
	strcpy( t_index_str.index_string, index_str.c_str() );

	indexString.push_back( t_index_str );
	
	index_group.push_back( t_manager );
//建立關(guān)鍵字類型
//	index_group[index_count-1].m_key = new c_key_value();

	return &index_group[index_count-1];
}

//獲得索引
INDEX_MANAGER* c_index_manager::getIndex(int seq )
{
	if( seq< 0 || seq >= 	index_group.size() )
		return NULL;
	else
	{
		index_no = seq;
		return &index_group[seq];
	}
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美韩国日本一区| 欧美日韩综合在线| 欧美高清在线视频| 高潮精品一区videoshd| 中文子幕无线码一区tr| av男人天堂一区| 伊人色综合久久天天人手人婷| 91黄视频在线| 午夜激情久久久| 欧美一区二区三区白人| 国产一区二区美女诱惑| 久久新电视剧免费观看| 粉嫩av一区二区三区在线播放 | 欧美福利一区二区| 蜜桃视频免费观看一区| 国产亚洲一本大道中文在线| 色呦呦国产精品| 日本中文字幕一区二区视频 | 国产日韩av一区| 色综合久久99| 蜜臀av一级做a爰片久久| 国产日产欧美精品一区二区三区| 97久久超碰国产精品| 视频一区二区中文字幕| 国产性色一区二区| 欧美吞精做爰啪啪高潮| 国内成人精品2018免费看| 国产精品久久久久久久久快鸭| 欧美少妇一区二区| 国产成人a级片| 首页国产丝袜综合| 国产精品色哟哟| 欧美岛国在线观看| 91国产免费观看| 国产精品一区二区久久精品爱涩| 亚洲成人资源网| 国产精品国产三级国产普通话三级| 欧美日韩国产一区二区三区地区| 国产精品综合在线视频| 日韩av电影一区| 亚洲美女电影在线| 国产欧美日韩在线观看| 欧美一区二区三区小说| 91福利在线看| 福利电影一区二区| 久久精品国产99国产| 五月天欧美精品| ●精品国产综合乱码久久久久| 精品国产乱码久久久久久浪潮| 在线国产亚洲欧美| 99re66热这里只有精品3直播| 极品销魂美女一区二区三区| 视频一区欧美精品| 亚洲大片一区二区三区| 136国产福利精品导航| 国产日韩欧美亚洲| 久久综合色婷婷| 在线播放中文一区| 欧美性一二三区| 色激情天天射综合网| jizzjizzjizz欧美| 国产福利91精品一区二区三区| 美女视频一区在线观看| 午夜亚洲国产au精品一区二区| 亚洲激情欧美激情| 中文字幕一区二区不卡 | 成人欧美一区二区三区白人| 国产免费成人在线视频| 国产精品三级av| 国产欧美日韩在线| 中文在线一区二区| 国产精品伦理一区二区| 中文字幕va一区二区三区| 欧美激情艳妇裸体舞| 久久精品视频一区二区三区| 精品国产欧美一区二区| 日韩免费电影一区| 欧美成人bangbros| 精品国产污污免费网站入口| 欧美变态tickle挠乳网站| 精品久久五月天| 久久久亚洲欧洲日产国码αv| 国产午夜亚洲精品理论片色戒| 久久综合久久99| 日本一区二区三区四区| 国产精品久久夜| 亚洲三级电影网站| 亚洲一区二区美女| 天天色图综合网| 久久66热偷产精品| 国产·精品毛片| 色婷婷激情久久| 欧美日本韩国一区二区三区视频| 7777精品伊人久久久大香线蕉的 | 韩国欧美一区二区| 国产v综合v亚洲欧| 91视频在线看| 欧美人与z0zoxxxx视频| 欧美一级免费大片| 国产亚洲精品免费| 一区二区理论电影在线观看| 日韩精品电影在线| 国产最新精品免费| 91亚洲精品久久久蜜桃网站| 欧美裸体一区二区三区| 久久蜜桃一区二区| 亚洲精品精品亚洲| 美女高潮久久久| 不卡的av在线播放| 欧美年轻男男videosbes| 精品成人在线观看| 亚洲人xxxx| 另类的小说在线视频另类成人小视频在线 | 天天色图综合网| 国产成人精品影视| 欧美日韩一区视频| 欧美韩国日本综合| 亚洲成人综合视频| 成人免费毛片app| 91精品国产综合久久香蕉麻豆| 久久久国际精品| 午夜欧美视频在线观看| 成人午夜激情影院| 日韩一级欧美一级| 一区二区三区毛片| 高清成人免费视频| 日韩欧美一区二区不卡| 亚洲三级免费观看| 国产成人自拍在线| 欧美一级xxx| 一区二区三区日韩精品| 国产精品亚洲综合一区在线观看| 欧美久久久久久久久中文字幕| 国产精品麻豆久久久| 国产一区二区伦理片| 91精品国产综合久久小美女| 亚洲男人天堂av| 成人中文字幕合集| 精品日韩在线一区| 日日摸夜夜添夜夜添精品视频 | 中文字幕国产精品一区二区| 日本不卡一二三| 欧美性大战久久| 亚洲欧美日韩在线| 国产69精品一区二区亚洲孕妇| 欧美不卡在线视频| 日本亚洲一区二区| 欧美色图一区二区三区| 亚洲欧洲av另类| www.亚洲色图.com| 国产欧美综合色| 国产成人精品网址| 久久婷婷一区二区三区| 免费的国产精品| 欧美一区二区在线视频| 三级一区在线视频先锋 | 一个色综合网站| 99国产精品久| 亚洲色图清纯唯美| 99久久婷婷国产综合精品电影| 久久九九99视频| 国产91丝袜在线观看| 久久久久久久av麻豆果冻| 久久成人免费网站| 欧美不卡123| 狠狠狠色丁香婷婷综合久久五月| 欧美一二三四区在线| 日韩1区2区日韩1区2区| 日韩免费性生活视频播放| 久久99精品国产麻豆婷婷| 日韩欧美一级二级三级| 麻豆91在线观看| 久久色.com| 国产成人自拍在线| 亚洲同性同志一二三专区| 91老师片黄在线观看| 亚洲成人免费av| 欧美一级欧美一级在线播放| 精品一区二区三区在线播放| 精品国产亚洲在线| 成人av在线影院| 夜夜精品视频一区二区| 欧美日韩亚洲综合在线| 蜜桃视频第一区免费观看| 久久久久久99久久久精品网站| 丁香婷婷综合激情五月色| 亚洲欧洲日产国码二区| 色美美综合视频| 免费一级欧美片在线观看| 久久免费看少妇高潮| 91美女在线视频| 日本在线不卡视频| 精品伦理精品一区| 99久久久久久| 天天影视涩香欲综合网| 2023国产精品自拍| 在线观看av一区二区| 久久不见久久见免费视频7 | 欧美精品一区二区三区在线播放| 国产成人在线视频网站|