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

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

?? c_shm_merge.cpp

?? 一個基于HP機器的共享內(nèi)存的實現(xiàn), 很使用,大型系統(tǒng),資料管理非常有用,只要將資料用sql語句配置好,裝載共享內(nèi)存即可,是一個已經(jīng)在用的大型系統(tǒng)的共享內(nèi)存程序,非常有價值.
?? CPP
?? 第 1 頁 / 共 5 頁
字號:

	//讀serial_list
	fread( p_serial_list, sizeof(int), 1, fp );
	fread( &(p_serial_list[1]), sizeof(int), p_serial_list[0]+1, fp );
	//寫十個子塊
	for( int i=0; i<MAX_ITEM_COUNT; i++ )
	{
		fread( p_merge_item[i]->p_merge_info, sizeof(SHM_MERGE_INFO), 1, fp );
		//printf("%drecord count:%d,%d\n", i,p_merge_item[i]->p_merge_info->record_count, p_merge_item[i]->p_merge_info->add_record_count);
		fread( p_merge_item[i]->p_merge_list, sizeof(SHM_MERGE_LIST), p_merge_item[i]->p_merge_info->record_count, fp );
		fread( p_merge_item[i]->p_add_merge_list, sizeof(SHM_MERGE_LIST), p_merge_item[i]->p_merge_info->add_record_count, fp );
	}

	//寫附加塊
	fread( p_merge_addition->p_merge_info, sizeof(SHM_MERGE_INFO), 1, fp );
	fread( p_merge_addition->p_merge_list_item, sizeof(SHM_MERGE_LIST_ITEM), p_merge_addition->p_merge_info->record_count, fp );

	return 0;
}

SHM_MERGE_LIST_ITEM* c_shm_merge::getNext()
{
	if( get_next_pos == -1 )
	{
		return NULL;
	}
	else
	{
		SHM_MERGE_LIST_ITEM* p_list;
		p_list = &(p_merge_addition->p_merge_list_item[get_next_pos]);
		get_next_pos = p_list->next_pos;
		return p_list;
	}
}

SHM_MERGE_LIST* c_shm_merge::getElementBySeq( const int main_seq, const int item_seq, const int find_in_sort )
{
	if( main_seq >= MAX_ITEM_COUNT )
	{
		printf("%d超過最大分塊數(shù)%d\n", main_seq, MAX_ITEM_COUNT);
		get_next_pos = -1;
		return NULL;
	}

	if( find_in_sort == 1 )
	{
		if( item_seq >= p_merge_item[main_seq]->p_merge_info->record_count )
		{
			printf("%d超過最大記錄數(shù)%d\n", item_seq, p_merge_item[main_seq]->p_merge_info->record_count);
			get_next_pos = -1;
			return NULL;
		}
		get_next_pos = p_merge_item[main_seq]->p_merge_list[item_seq].item_pos;
		return &(p_merge_item[main_seq]->p_merge_list[item_seq]);
	}
	else
	{
		if( item_seq >= p_merge_item[main_seq]->p_merge_info->add_record_count )
		{
			printf("%d超過最大記錄數(shù)%d\n", item_seq, p_merge_item[main_seq]->p_merge_info->add_record_count);
			get_next_pos = -1;
			return NULL;
		}
		get_next_pos = p_merge_item[main_seq]->p_add_merge_list[item_seq].item_pos;
		return &(p_merge_item[main_seq]->p_add_merge_list[item_seq]);
	}
}

/////2006-01-18
long c_shm_merge::getCharge(const int serv_id, const int counting_type_id, const int acct_item_type_id )
{
	//首先確定是在哪一塊中
	int main_seq = (serv_id%100)/10;
	
	//在小塊中查找
	if( counting_type_id != -1 )
	{
		SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->findServID( serv_id, counting_type_id );
		if( p_find_main != NULL )
		{
			//找到號碼
			//return update( p_find_main->item_pos, p_item, p_fee );
			return p_merge_addition->getFee(p_find_main->item_pos, acct_item_type_id);
		}
		else
		{
			//打不到
			return -999999;
		}	
	}
	else
	{
		SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->findServID( serv_id, -1 );

		long t = 0;


		for( int i = 0; i<  p_merge_item[main_seq]->foundMerge.size(); i++ )
		{
			//找到號碼
			//return update( p_find_main->item_pos, p_item, p_fee );
 			t = t + p_merge_addition->getFee(  p_merge_item[main_seq]->foundMerge[i]->item_pos, acct_item_type_id);
		}

		if (t == 0 )
		{
			return -999999;
		}
		else
			return t;
	}
}

//liuliming
//20060605增加接口
bool c_shm_merge::getCharge(const long serv_id, const int billing_cycle_id, const short int acct_item_type_id, const short int item_source, long* out_value )
{
	//構(gòu)造acct_item_
	int tmp_acct_item_type = 0;
	setInt( acct_item_type_id, item_source, &tmp_acct_item_type );
	//構(gòu)造main
	char tmp_buf[20];
	memcpy( &tmp_buf[0], &serv_id, 8 );
	memcpy( &tmp_buf[8], &billing_cycle_id, 4 );
	
	return getCharge( &tmp_buf[0], tmp_acct_item_type, out_value );
}

bool c_shm_merge::getCharge(const void* p_main, const int acct_item_type_id, long* out_value )
{
	//首先確定是在哪一塊中
	int main_seq = getMergeItemSeq(p_main);
	
	//在小塊中查找
	SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->find(p_main);
	if( p_find_main != NULL )
	{
		//找到號碼
		return  p_merge_addition->getFee(p_find_main->item_pos, acct_item_type_id, out_value);
	}
	else
	{
		//打不到
		return false;
	}
}

bool c_shm_merge::updateCharge(const long serv_id, const int counting_type_id, const int acct_item_type_id, const long fee )
{
	//首先確定是在哪一塊中
	int main_seq = (serv_id%100)/10;
	
	//在小塊中查找
	SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->findServID( serv_id, counting_type_id );
	if( p_find_main != NULL )
	{
		//找到號碼
		//return update( p_find_main->item_pos, p_item, p_fee );
		return p_merge_addition->updateFee(p_find_main->item_pos, acct_item_type_id, fee);
	}
	else
	{
		//找不到
		return false;
	}	
}

bool c_shm_merge::updateCharge(const void * p_main, const int acct_item_type_id, const long fee )
{
	//首先確定是在哪一塊中
	int main_seq = getMergeItemSeq(p_main);
	
	//在小塊中查找
	SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->find(p_main);
	if( p_find_main != NULL )
	{
		//找到號碼
		//return update( p_find_main->item_pos, p_item, p_fee );
		return p_merge_addition->updateFee(p_find_main->item_pos, acct_item_type_id, fee);
	}
	else
	{
		//找不到
		if( p_merge_item[main_seq]->append( p_main, &acct_item_type_id, &fee ) == 0 )
			return true;
		else
			return false;
	}	
	return true;
}

bool c_shm_merge::updateCharge(const long serv_id, const int billing_cycle_id, const short int acct_item_type_id, const short int item_source, const long fee )
{
	//構(gòu)造acct_item_
	int tmp_acct_item;
	setInt( acct_item_type_id, item_source, &tmp_acct_item );
	//構(gòu)造main
	char tmp_buf[20];
	memcpy( &tmp_buf[0], &serv_id, 8 );
	memcpy( &tmp_buf[8], &billing_cycle_id, 4 );
	
	return updateCharge( &tmp_buf[0], tmp_acct_item, fee );
}

//更新所有的帳目項
//先刪除后增加
bool c_shm_merge::updateChargeList(const long serv_id, const int billing_cycle_id, vector<ACCT_ITEM_FEE>* acct_item_fee )
{
	//構(gòu)造main
	char tmp_buf[20];
	memcpy( &tmp_buf[0], &serv_id, 8 );
	memcpy( &tmp_buf[8], &billing_cycle_id, 4 );
	
	return updateChargeList( &tmp_buf[0], acct_item_fee );
}

bool c_shm_merge::updateChargeList( const void* p_main, vector<ACCT_ITEM_FEE>* acct_item_fee )
{
	//首先確定是在哪一塊中
	int main_seq = getMergeItemSeq(p_main);
	//在小塊中查找
	SHM_MERGE_LIST* p_find_main = p_merge_item[main_seq]->find(p_main);
	
	if( p_find_main != NULL )
	{
		//找到號碼
		p_find_main->item_pos = -1;
		if( (*acct_item_fee).size() > 0 )
		{
			//插入全新的數(shù)據(jù)
			return insertNewList( p_find_main, acct_item_fee );
		}
		else
		{
			//不用插入	
			return true;
		}
	}
	else
	{
		//找不到插入全新的數(shù)據(jù)
		append_mutex.enterMutex();
		int pos = p_merge_item[main_seq]->p_merge_info->add_record_count;
		p_merge_item[main_seq]->p_merge_info->add_record_count ++; 
		append_mutex.leaveMutex();
		
		memcpy( p_merge_item[main_seq]->p_add_merge_list[pos].main, (char*)p_main, main_key_size );
		p_merge_item[main_seq]->p_add_merge_list[pos].item_pos = -1;
		p_find_main = & (p_merge_item[main_seq]->p_add_merge_list[pos]);
		return insertNewList( p_find_main, acct_item_fee );
	}	
}

bool c_shm_merge::insertNewList( SHM_MERGE_LIST* p_find_main, vector<ACCT_ITEM_FEE>* acct_item_fee )
{
	int i, main_pos=0, add_count=0;
	long tmp_value = 0;
	sort( (*acct_item_fee).begin(), (*acct_item_fee).end(), lessByItemKey );
	for( i = 0 ; i < (*acct_item_fee).size() ; i ++ )
	{
		if( add_count == 0 )
		{
			append_mutex.enterMutex();					
			main_pos = p_merge_addition->p_merge_info->record_count;
			p_merge_addition->p_merge_info->record_count ++;
			append_mutex.leaveMutex();
			p_find_main->item_pos = main_pos;
	
			memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[0].key), &((*acct_item_fee)[i].key), sizeof(int) );
			memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[0].fee), &((*acct_item_fee)[i].fee), sizeof(long) );		
			p_merge_addition->p_merge_list_item[main_pos].ele_count = 1;
			p_merge_addition->p_merge_list_item[main_pos].next_pos = -1;
			add_count ++;
		}
		else
		{
			if( (*acct_item_fee)[i].key == (*acct_item_fee)[i-1].key )
			{
				memcpy( &tmp_value, &(p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count].fee), sizeof(long) );
				tmp_value += (*acct_item_fee)[i-1].fee;
				memcpy( &(p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count].fee), &tmp_value, sizeof(long) );
				//p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count-1].fee += acct_item_fee[i].fee;
				continue;
			}
			else
			{
				if( add_count % MAX_LIST_COUNT == 0 )
				{
					//滿了
					append_mutex.enterMutex();	
					p_merge_addition->p_merge_list_item[main_pos].next_pos = p_merge_addition->p_merge_info->record_count;
					main_pos = p_merge_addition->p_merge_info->record_count;
					p_merge_addition->p_merge_info->record_count ++;
					append_mutex.leaveMutex();

					memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[0].key), &((*acct_item_fee)[i].key), sizeof(int) );
					memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[0].fee), &((*acct_item_fee)[i].fee), sizeof(long) );		
					p_merge_addition->p_merge_list_item[main_pos].ele_count = 1;
					p_merge_addition->p_merge_list_item[main_pos].next_pos = -1;
				}
				else
				{
					//沒滿
					memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count].key), &((*acct_item_fee)[i].key), sizeof(int) );
					memcpy(&(p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count].fee), &((*acct_item_fee)[i].fee), sizeof(long) );		
					//p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count-1].key = acct_item_fee[i].key;
					//p_merge_addition->p_merge_list_item[main_pos].acctFee[p_merge_addition->p_merge_list_item[main_pos].ele_count-1].fee = acct_item_fee[i].fee;		
					p_merge_addition->p_merge_list_item[main_pos].ele_count ++;
				}
				add_count ++;
			}
		}				
	}
	return true;
}

int c_shm_merge::appendElement(const long serv_id, const int billing_cycle_id, const short int acct_item_type_id, const short int item_source_id, long fee)
{
	//構(gòu)造acct_item_
	int tmp_acct_item;
	setInt( acct_item_type_id, item_source_id, &tmp_acct_item );
	//構(gòu)造main
	char tmp_buf[20];
	memcpy( &tmp_buf[0], &serv_id, 8 );
	memcpy( &tmp_buf[8], &billing_cycle_id, 4 );
	return appendElement( &tmp_buf[0], &tmp_acct_item, &fee );
}

bool c_shm_merge::getFirstElement( long* serv_id, int* billing_cycle_id )
{
	SHM_MERGE_LIST* _first = getFirstElement() ;
	if( _first != NULL )
	{
		memcpy(serv_id, &_first->main[0], 8);
		memcpy(billing_cycle_id, &_first->main[8], 4);
		get_next_pos = _first->item_pos;
		p_list = getNext();
		list_get_item_count = -1;
		return true;
	}
	else
	{
		return false;
	}
}

bool c_shm_merge::getNextElement( long* serv_id, int* billing_cycle_id )
{
	SHM_MERGE_LIST* _tmp = getNextElement();
	if( _tmp != NULL )
	{
		memcpy(serv_id, &_tmp->main[0], 8);
		memcpy(billing_cycle_id, &_tmp->main[8], 4);
		get_next_pos = _tmp->item_pos;
		p_list = getNext();
		list_get_item_count = -1;
		return true;
	}
	else
	{
		return false;
	}
}

bool c_shm_merge::getNextItem( short int* acct_item_id, short int* item_source_id, long* acct_fee )
{
	if( p_list == NULL )
	{
		return false;
	}
	list_get_item_count ++;
	if( list_get_item_count >= p_list->ele_count )
	{
		p_list = getNext();
		if( p_list == NULL )
		{
			return false;
		}
		else
		{
			list_get_item_count = 0;
		}
	}
	char tmp_key[20];
	memcpy( &tmp_key[0], &(p_list->acctFee[list_get_item_count].key), 20);
	memcpy( acct_item_id, &tmp_key[0], 2 );
	memcpy( item_source_id, &tmp_key[2], 2 );
	memcpy( acct_fee, &(p_list->acctFee[list_get_item_count].fee), 8 );

	//int tmp_d;
	//char tmp_char[17];
	//memcpy( &tmp_char[0], &(p_list->acctFee[list_get_item_count].key), 16 );
	//for( tmp_d = 0 ; tmp_d < 16; tmp_d ++ )
	//	printf( "%d\t", tmp_char[tmp_d] );
	//printf("\n");fflush(stdout);
	return true;
}

bool c_shm_merge::setInt( const short int acct_item_id, const short int item_source_id, int* acct_item )
{
	char buf[4];
	memcpy( &buf[0], &acct_item_id, sizeof(short int ) );
	memcpy( &buf[2], &item_source_id, sizeof(short int) );
	memcpy( acct_item, buf, sizeof(int));
	return true;
}

bool c_shm_merge::getShortInt( const int acct_item, short int* acct_item_id, short int * item_source_id )
{
	char buf[4];
	memcpy( buf, &acct_item, sizeof(int));
	memcpy( acct_item_id, &buf[0], sizeof(short int ) );
	memcpy( item_source_id, &buf[2], sizeof(short int) );	
	return true;
}
	
SHM_MERGE_LIST* c_shm_merge::getFirstElement()
{
	//先從有序區(qū)找
	i_item_seq=0;
	i_sort_seq=1;
	i_element_seq=0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色久综合一二码| 亚洲欧美综合另类在线卡通| 色狠狠综合天天综合综合| 成人性生交大片免费| 国产另类ts人妖一区二区| 国内外成人在线| 韩国女主播成人在线| 激情综合色播激情啊| 国内欧美视频一区二区| 极品销魂美女一区二区三区| 久久精品国产久精国产爱| 麻豆一区二区在线| 国内外成人在线| 国产成人av一区| 99精品久久久久久| 欧洲精品中文字幕| 欧美日韩1区2区| 日韩欧美自拍偷拍| 国产三级精品三级在线专区| 国产欧美日韩中文久久| 国产精品久久久久一区二区三区| 中文字幕一区二区三区四区不卡| 一区二区三区在线影院| 丝袜美腿亚洲色图| 裸体健美xxxx欧美裸体表演| 国产精品资源站在线| 成人黄色a**站在线观看| 一本色道久久综合亚洲91| 欧美吞精做爰啪啪高潮| 日韩欧美一区二区三区在线| 国产日韩欧美亚洲| 亚洲人成小说网站色在线| 午夜精品影院在线观看| 麻豆精品一区二区综合av| 国产伦精品一区二区三区免费迷| 成人一级视频在线观看| 欧美性一区二区| 日韩一区二区高清| 国产精品久久久久久久久晋中| 亚洲最大的成人av| 久久成人久久鬼色| 99久久国产综合色|国产精品| 欧美日韩黄色一区二区| 久久久国产精品不卡| 一区二区三区四区在线播放| 免费精品视频在线| 97精品久久久久中文字幕| 在线观看免费视频综合| 26uuu国产电影一区二区| 亚洲色图一区二区三区| 老司机午夜精品99久久| 91在线小视频| 日韩女优视频免费观看| 亚洲人123区| 国产综合色精品一区二区三区| 97精品超碰一区二区三区| 日韩西西人体444www| 国产精品久久久久久久久免费丝袜 | 日本在线不卡视频| 成人福利视频在线| 日韩精品一区在线| 樱花草国产18久久久久| 国产美女在线观看一区| 欧美日韩另类国产亚洲欧美一级| 久久久午夜精品理论片中文字幕| 亚洲午夜一区二区三区| 懂色av中文一区二区三区| 日韩一区二区三区电影在线观看| 国产精品久久久久三级| 久久99精品国产麻豆不卡| 欧洲av一区二区嗯嗯嗯啊| 免费一区二区视频| 91福利视频在线| 中文字幕巨乱亚洲| 精品制服美女丁香| 欧美肥胖老妇做爰| 亚洲激情中文1区| 成人国产精品免费| 精品sm在线观看| 日产国产欧美视频一区精品| 色哟哟一区二区在线观看| 2021中文字幕一区亚洲| 日韩中文欧美在线| 欧美日韩一卡二卡| 亚洲素人一区二区| caoporm超碰国产精品| 精品国内片67194| 麻豆精品在线播放| 91精品免费在线| 日韩精品三区四区| 欧美日韩中文字幕一区| 一区二区三区欧美视频| 91丝袜美腿高跟国产极品老师 | 精品亚洲免费视频| 日韩午夜在线影院| 免费欧美在线视频| 欧美一级高清片| 日本sm残虐另类| 欧美一卡2卡3卡4卡| 肉肉av福利一精品导航| 欧美日韩黄色影视| 日韩av一级片| 日韩一卡二卡三卡| 另类中文字幕网| 欧美mv日韩mv国产网站| 久久精工是国产品牌吗| 精品久久人人做人人爽| 极品少妇一区二区三区精品视频| 精品国产污网站| 国产乱子伦视频一区二区三区| 日韩欧美一区中文| 国产一区欧美二区| 中文字幕二三区不卡| av午夜精品一区二区三区| 日韩伦理免费电影| 色婷婷一区二区三区四区| 亚洲一区av在线| 欧美精品久久99久久在免费线 | av不卡在线播放| 日韩毛片视频在线看| 日本国产一区二区| 五月天中文字幕一区二区| 日韩久久精品一区| 国产福利一区二区三区视频在线 | 亚洲一区二区在线播放相泽| 欧美色精品在线视频| 日本中文字幕一区二区有限公司| 日韩三级伦理片妻子的秘密按摩| 国产真实乱偷精品视频免| 欧美国产精品v| 欧洲av一区二区嗯嗯嗯啊| 青娱乐精品视频| 久久精品视频一区二区| 色综合天天做天天爱| 五月婷婷综合在线| 国产午夜精品福利| 色综合天天综合网国产成人综合天| 亚洲激情中文1区| 欧美一级一级性生活免费录像| 国产乱码字幕精品高清av | 亚洲欧洲韩国日本视频| 欧亚洲嫩模精品一区三区| 蜜臀av一区二区在线免费观看| 国产亚洲一区二区在线观看| 在线视频一区二区免费| 美女网站一区二区| 1024亚洲合集| 欧美一级久久久久久久大片| 丁香六月久久综合狠狠色| 亚洲第一搞黄网站| 国产免费观看久久| 欧美日韩高清一区| 国产91精品在线观看| 亚洲成人av福利| 国产亚洲短视频| 欧美美女直播网站| 不卡视频一二三四| 精品亚洲免费视频| 亚洲国产欧美日韩另类综合 | 久久精品国内一区二区三区| 中文字幕一区二区三区视频| 日韩欧美国产三级| 欧美在线小视频| 风间由美一区二区三区在线观看| 亚洲妇熟xx妇色黄| 亚洲欧美自拍偷拍色图| 精品福利一区二区三区| 欧美亚洲国产怡红院影院| 国产伦精一区二区三区| 日韩影视精彩在线| 亚洲乱码国产乱码精品精的特点 | 欧美午夜精品一区二区三区| 国产盗摄精品一区二区三区在线| 午夜电影网亚洲视频| 综合久久久久久| 久久久国产午夜精品| 日韩一区二区视频| 欧美日韩精品一区二区三区蜜桃| 99久精品国产| 风间由美一区二区av101| 看电视剧不卡顿的网站| 性久久久久久久| 一级日本不卡的影视| 中文字幕亚洲成人| 久久九九99视频| 久久综合九色综合97婷婷女人 | 色综合中文字幕| 粉嫩aⅴ一区二区三区四区| 久草中文综合在线| 天堂在线亚洲视频| 亚洲一区二区3| 一区二区三区91| 亚洲欧美日韩久久| 国产精品色眯眯| 国产精品青草综合久久久久99| 久久在线免费观看| 欧美成人video| 欧美大片日本大片免费观看| 91精品久久久久久久久99蜜臂| 欧美图片一区二区三区|