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

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

?? tmap.cpp

?? TFixedAlloc類是一個非常不錯的使用與Linux和windows跨平臺的內(nèi)存分配工具
?? CPP
字號:
#include "TMap.h"
//****************************************** TMapStringToPtr -> ***********************************************//
//
TMapStringToPtr::TMapStringToPtr()
{
	m_pHashTable = TNULL;
	m_nHashTableSize = 17;	// default size
	m_nCount = 0;
	m_pFreeList = TNULL;
	m_pBlocks = TNULL;
	m_nBlockSize = 10;
}

TMapStringToPtr::TMapStringToPtr( int nBlockSize )
{
	m_pHashTable = TNULL;
	m_nHashTableSize = 17;	// default size
	m_nCount = 0;
	m_pFreeList = TNULL;
	m_pBlocks = TNULL;
	m_nBlockSize = nBlockSize;
}

TMapStringToPtr::~TMapStringToPtr()
{
	RemoveAll();
	assert( m_nCount==0 );
}

TBOOL TMapStringToPtr::Lookup( TLPCSTR key,void *& rValue ) const
{
	TUINT nHash;
	CAssoc * pAssoc = GetAssocAt( key,nHash );
	if( pAssoc==TNULL )
		return TFALSE;	// not in map

	rValue = pAssoc->value;
	return TTRUE;
}

TBOOL TMapStringToPtr::LookupKey( TLPCSTR key,TLPCSTR & rkey ) const
{
	TUINT nHash;
	CAssoc * pAssoc = GetAssocAt( key,nHash );
	if( pAssoc==TNULL )
		return TFALSE;	// not in map;
	rkey = pAssoc->key;
	return TTRUE;
}

void *& TMapStringToPtr::operator[]( TLPCSTR key )
{
	TUINT nHash;
	CAssoc * pAssoc;
	if( (pAssoc=GetAssocAt(key,nHash)) == TNULL )
	{
		if( m_pHashTable==TNULL )
			InitHashTable( m_nHashTableSize );

		pAssoc = NewAssoc();
		pAssoc->nHashValue = nHash;

		int nLen = strlen( key );
		assert( nLen<=MAX_HASHKEY_LEN-1 );
		strcpy( pAssoc->key,key );

		// put into hash table
		pAssoc->pNext = m_pHashTable[nHash];
		m_pHashTable[nHash] = pAssoc;
	}
	return pAssoc->value;	// return new reference
}

TBOOL TMapStringToPtr::RemoveKey( TLPCSTR key )	// remove key - return TTRUE if remove
{
	if( m_pHashTable==TNULL )
		return TFALSE;	// nothing in the table

	CAssoc ** ppAssocPrev;
	ppAssocPrev = &m_pHashTable[ HashKey(key) % m_nHashTableSize ];

	CAssoc * pAssoc;
	for( pAssoc=*ppAssocPrev; pAssoc!=TNULL; pAssoc=pAssoc->pNext )
	{
		if( strcmp(pAssoc->key,key) == 0 )
		{
			// remove it
			*ppAssocPrev = pAssoc->pNext;	// remove from list
			FreeAssoc( pAssoc );
			return TTRUE;
		}
		ppAssocPrev = &pAssoc->pNext;
	}
	return TFALSE;	// not found
}

void TMapStringToPtr::RemoveAll()
{
	if( m_pHashTable != TNULL )
	{
		delete [] m_pHashTable;
		m_pHashTable = TNULL;
	}
	m_nCount = 0;
	m_pFreeList = TNULL;
	m_pBlocks->FreeDataChain();
	m_pBlocks = TNULL;
}

void TMapStringToPtr::GetNextAssoc( TPOSITION & rNextPosition,char *& rKey,void *& rValue) const
{
	assert( m_pHashTable!=TNULL ); // never call on empty map

	CAssoc * pAssocRet = (CAssoc *)rNextPosition;
	assert( pAssocRet!=TNULL );

	if( pAssocRet==(CAssoc *)TBEFORE_START_POSITION )
	{
		// find the first association
		for( TUINT nBucket=0; nBucket<m_nHashTableSize; nBucket++ )
			if( (pAssocRet=m_pHashTable[nBucket]) != TNULL )
				break;
		assert( pAssocRet!=TNULL );	// must find something
	}

	// find next association

	CAssoc * pAssocNext;
	if( (pAssocNext=pAssocRet->pNext) == TNULL )
	{
		// go to next bucket
		for( TUINT nBucket=pAssocRet->nHashValue+1; nBucket<m_nHashTableSize; nBucket++ )
		{
			if( (pAssocNext=m_pHashTable[nBucket]) != TNULL )
				break;
		}
	}
	rNextPosition = (TPOSITION) pAssocNext;

	// fill in return data
	//strcpy( rKey,pAssocRet->key );
	rKey = pAssocRet->key;
	rValue = pAssocRet->value;
}

void TMapStringToPtr::InitHashTable( TUINT nHashSize,TBOOL bAllocNow )
{
	assert( m_nCount==0 );
	assert( nHashSize>0 );

	if( m_pHashTable!=TNULL )
	{
		// free hash table
		delete [] m_pHashTable;
		m_pHashTable = TNULL;
	}

	if( bAllocNow )
	{
		m_pHashTable = new CAssoc* [nHashSize];
#ifdef _UNITTEST_
		 //        m_pHashTable = TNULL;
#endif
		if( m_pHashTable==TNULL )
		{
			char szException[60]={0};
			sprintf( szException,"%s:%d",__FILE__,__LINE__ );
			//printf(szException);
			return;
		}
		memset( m_pHashTable,0,sizeof(CAssoc *) * nHashSize );
	}
	m_nHashTableSize = nHashSize;
}

inline TUINT TMapStringToPtr::HashKey( TLPCSTR key ) const
{
	TUINT nHash = 0;
	while( *key )
	{
		nHash = (nHash<<5) + nHash + *key++;
	}
	return nHash;
}

TMapStringToPtr::CAssoc * TMapStringToPtr::NewAssoc()
{
	if( m_pFreeList==TNULL )
	{
		// add another block
		TPlex * newBlock = TPlex::Create( m_pBlocks,m_nBlockSize,sizeof(TMapStringToPtr::CAssoc) );
		// chain them into free list
		TMapStringToPtr::CAssoc * pAssoc = (TMapStringToPtr::CAssoc *) newBlock->data();
		// free in reverse order to make it easier to debug
		pAssoc += m_nBlockSize - 1;
		for( int i=m_nBlockSize-1; i>=0; i--,pAssoc-- )
		{
			pAssoc->pNext = m_pFreeList;
			m_pFreeList = pAssoc;
		}
	}

	assert( m_pFreeList!=TNULL );	// we must have something

	TMapStringToPtr::CAssoc * pAssoc = m_pFreeList;
	m_pFreeList = m_pFreeList->pNext;
	m_nCount++;
	assert( m_nCount>0 );	// make sure we don't overflow
	memset( pAssoc->key,0,sizeof(pAssoc->key) / sizeof(char) );
	pAssoc->value = 0;
	return pAssoc;
}

void TMapStringToPtr::FreeAssoc( TMapStringToPtr::CAssoc * pAssoc )
{
	pAssoc->pNext = m_pFreeList;
	m_pFreeList = pAssoc;
	m_nCount --;
	assert( m_nCount>=0 );	// make sure we don't underflow
	
	// if no more elements , cleanup completely
	if( m_nCount==0 )
		RemoveAll();
}

TMapStringToPtr::CAssoc * TMapStringToPtr::GetAssocAt( TLPCSTR key,TUINT & nHash ) const	// find association (or return TNULL)
{
	nHash = HashKey(key) % m_nHashTableSize;

	if( m_pHashTable==TNULL )
		return TNULL;

	// see if it exists
	CAssoc * pAssoc;
	for( pAssoc=m_pHashTable[nHash]; pAssoc!=TNULL; pAssoc=pAssoc->pNext )
	{
		if( strcmp(pAssoc->key,key)==0 )
			return pAssoc;
	}
	return TNULL;
}
//
//****************************************** <- TMapStringToPtr ***********************************************//


//////////////////////////////////////////////////////////////////////

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
av网站免费线看精品| 国产成人在线网站| 久久69国产一区二区蜜臀| 国产一区二区三区四区在线观看| 日韩av在线免费观看不卡| 国产精品一区不卡| 欧美性三三影院| 亚洲男同1069视频| 成人动漫一区二区三区| 日韩欧美国产一区二区三区| 亚洲综合一区二区精品导航| jlzzjlzz欧美大全| 国产午夜亚洲精品理论片色戒| 日本美女一区二区三区视频| 91福利精品视频| 亚洲免费在线播放| 91美女片黄在线观看91美女| 国产精品区一区二区三| 国产激情精品久久久第一区二区| 日韩精品中文字幕一区二区三区| 天天综合天天做天天综合| 91久久精品一区二区三| 又紧又大又爽精品一区二区| 91蝌蚪porny| 亚洲婷婷国产精品电影人久久| 成人听书哪个软件好| 国产人成亚洲第一网站在线播放| 国产高清久久久久| 国产精品午夜免费| av电影一区二区| 亚洲日本在线天堂| 欧美色综合久久| 亚洲www啪成人一区二区麻豆| 欧美日韩成人综合在线一区二区| 香蕉乱码成人久久天堂爱免费| 欧美日韩国产色站一区二区三区| 日韩在线一区二区| 欧美一区二区在线播放| 国内精品在线播放| 亚洲国产精品二十页| 97精品国产97久久久久久久久久久久| 综合色中文字幕| 欧美日韩美少妇| 久久精品国产免费| 国产偷国产偷亚洲高清人白洁| av电影一区二区| 亚洲成人免费视频| 精品久久久久久无| 成人va在线观看| 亚洲成av人片观看| 精品成人在线观看| kk眼镜猥琐国模调教系列一区二区| 国产精品久久久久久久久图文区 | 秋霞午夜av一区二区三区| 91精品国产品国语在线不卡| 国产伦精品一区二区三区免费迷| 国产欧美日韩视频一区二区| 色综合久久久网| 免费成人在线观看| 国产精品久久二区二区| 91黄色免费网站| 国产在线精品一区二区不卡了| 亚洲欧美在线aaa| 日韩视频一区二区在线观看| 成人午夜短视频| 五月天一区二区三区| 欧美韩日一区二区三区| 欧美自拍偷拍午夜视频| 国产激情一区二区三区| 亚洲成人激情自拍| 国产精品色哟哟网站| 欧美一区二区精品| 91精品办公室少妇高潮对白| 国产一区二区三区四区五区美女| 夜夜爽夜夜爽精品视频| 国产视频视频一区| 日韩一区二区三区免费看| 在线影院国内精品| 粉嫩av一区二区三区在线播放 | 久久超级碰视频| 亚洲精选免费视频| 2023国产精品视频| 欧美日韩视频在线第一区| 福利视频网站一区二区三区| 日本一不卡视频| 夜夜精品浪潮av一区二区三区| 国产无遮挡一区二区三区毛片日本| 欧美片在线播放| 91激情在线视频| 成年人午夜久久久| 国产福利不卡视频| 久久福利资源站| 日韩av中文字幕一区二区 | 免费成人小视频| 亚洲国产一区二区在线播放| 国产精品乱码妇女bbbb| 欧美不卡一区二区| 日韩视频123| 欧美日韩国产另类一区| 91久久香蕉国产日韩欧美9色| 成人动漫在线一区| 99久久伊人精品| 国产成人免费xxxxxxxx| 韩国三级在线一区| 激情国产一区二区 | 婷婷夜色潮精品综合在线| 一区二区三区在线观看视频| 中文字幕日韩一区| 亚洲欧美日本在线| 亚洲精品日韩一| 亚洲r级在线视频| 亚洲国产日韩精品| 亚洲电影中文字幕在线观看| 亚洲一二三级电影| 爽好多水快深点欧美视频| 亚洲国产日韩在线一区模特| 亚洲r级在线视频| 免费久久99精品国产| 免费精品视频在线| 国产一区不卡在线| 丁香婷婷综合色啪| 91视视频在线直接观看在线看网页在线看| 成人激情动漫在线观看| 91麻豆国产福利精品| 欧美又粗又大又爽| 欧美日韩三级在线| 69堂国产成人免费视频| 欧美不卡激情三级在线观看| 久久日韩精品一区二区五区| 国产无人区一区二区三区| 中文字幕一区二| 亚洲国产成人porn| 狠狠网亚洲精品| 99久久国产综合精品色伊| 91国产免费看| 精品国产乱码久久久久久1区2区| 久久精品无码一区二区三区| 亚洲人成网站影音先锋播放| 五月天一区二区| 国产福利精品一区| 欧美色男人天堂| 久久亚洲精品小早川怜子| 国产精品福利一区| 另类欧美日韩国产在线| 懂色一区二区三区免费观看 | www.亚洲激情.com| 欧美主播一区二区三区美女| 日韩一区二区三区免费看| 欧美国产日韩精品免费观看| 一区二区三区蜜桃网| 精东粉嫩av免费一区二区三区| 成人av资源在线观看| 欧美丰满美乳xxx高潮www| 国产情人综合久久777777| 亚洲成人资源网| jiyouzz国产精品久久| 欧美疯狂性受xxxxx喷水图片| 国产亚洲精品免费| 婷婷开心激情综合| 91视频国产资源| 久久久久久免费网| 日韩在线a电影| 色88888久久久久久影院按摩| 久久人人97超碰com| 香蕉加勒比综合久久| 大美女一区二区三区| 日韩精品一区二区在线| 亚洲一区av在线| 99精品视频一区二区| 精品久久久久一区| 日本不卡在线视频| 91福利精品视频| 中文字幕亚洲不卡| 粉嫩绯色av一区二区在线观看| 日韩欧美中文字幕公布| 亚洲超碰精品一区二区| 91在线视频免费91| 国产精品色一区二区三区| 国产麻豆视频精品| 精品99999| 精品中文字幕一区二区| 7777精品伊人久久久大香线蕉超级流畅 | 中文字幕在线观看不卡视频| 国内精品第一页| 日韩三级视频在线观看| 午夜久久电影网| 91精品办公室少妇高潮对白| 成人欧美一区二区三区白人| 顶级嫩模精品视频在线看| 欧美精品一区二区久久婷婷| 免费在线看成人av| 日韩午夜激情视频| 美女国产一区二区三区| 欧美一区二区黄| 麻豆一区二区三| 日韩免费视频一区| 韩国视频一区二区| 国产欧美一区二区精品性色超碰| 国产成人精品免费在线| 亚洲国产高清不卡|