memlist.h

来自「中文编码转换」· C头文件 代码 · 共 210 行

H
210
字号

#pragma once
 /************************************************************************/
/*             只包含一次                                               */
/************************************************************************/

class  CMemList
{
	long		m_lMemSize;
	long		m_lBlockSize;
	long		m_lTotalNum;
	long		m_iIncSize;

	void	*	m_tpHead;

	void	*	memAlloc ();
public:
	CMemList (int _iSize, int _iIncSize=100);
	CMemList ();
	~CMemList ();

	void* operator[] (int _idx);
	void operator= (CMemList& oSrc);
	BOOL operator!= (CMemList& oSrc);


	void		init (int _lSize, int _iIncSize=100);
	void        inittest (int _lSize, int _iIncSize=100);
	long		count();
	void	*	getData (int _iNth);  // zero base
	void	*	getHead ();
	void	*	add (void * tpData);
	void	*	add (void * tpData, int _iNth);
	int			del (int _iNth);  // zero base
	void		delAll ();
	int			getBlockSize ();
	void		memFree ();


	void		qSort ( int (* SortFunc) (const void* ele1, const void* ele2)); 
	void	*	bFind ( const void *key, const void *base, unsigned int num, unsigned int width, int (__cdecl *compare)(const void *elem1, const void *elem2) );
	void	*	bFind ( const void *key, int (__cdecl *compare)(const void *elem1, const void *elem2) );
	void	*	qFind ( const void *_pKey, int (*)(const void * _pArg1, const void * _pArg2), int _iFindOption=0, int* _ipNearNth =NULL);
};

/////////////////////////////////////////////////////////////
// 皋葛府 钮 备泅 
class  CMemQ
{
public:

	int		m_iUnitSize;	// 蜡粗(窜困) 荤捞令
	int		m_iMax;			// 钮 傈眉 农扁 (= 蜡粗狼 俺荐)
	int		m_iCount;		// 泅犁 钮俊 甸绢乐绰 蜡粗 俺荐

	char*	m_cpHead;		// 皋葛府 庆歹.

	int		m_iCurPos;		// 钮狼 付瘤阜 蜡粗 困摹 
	int		m_iBasePos;		// 钮狼 贸澜 蜡粗 困摹 


public:
	CMemQ(); // default绰 long蔼捞 100俺肺 悸泼凳 
	CMemQ(int _iUnitSize, int _iNum);
	~CMemQ();

	void	initVar ();

	char*	allocStack(int _iUnitSize, int _iNum);
	void	freeStack();
	int		unitSize();
	int		num();

	void*	getData(int _iNth);
	void*	put(void* _pUnut);
	void*	get();
};

/*
typedef struct tagCompData
{
	long	lid;
	double	dData;
	char	cpName[32];
}TCData;


// qSort俊辑 荤侩窍绰 厚背窃荐 抗力
int SortFunc (const void* _arg1, const void* _arg2)
{
	TCData* tpCur1 = (TCData *)_arg1;
	TCData* tpCur2 = (TCData *)_arg2;

	return (tpCur1->lid > tpCur2->lid);
}


// MemList甫 捞侩茄 官捞呈府 八祸 舅绊府硫 备泅 抗力.
// 单捞磐绰 固府 家泼登绢 乐绢具 茄促
TCData* binFind (CMemList* _opList, long _lVal)
{
	if (_opList == NULL)
		return NULL;

	TCData* tpHead = (TCData*)_opList->getHead ();
	if (tpHead == NULL)
		return NULL;

	int iMaxCnt = _opList->count ();
	if (iMaxCnt<1)
		return NULL;


	int iS = 0;
	int iE = iMaxCnt-1;
	int iM = (iE+iS)/2;

	while ( 1 )
	{
		TCData* tpCur = tpHead+iM;
		if (tpCur->lid == _lVal)
		{
			return tpCur;
		}

		if (tpCur->lid < _lVal)
			iS=iM+1;
		else
			iE = iM-1;
		iM = (iS+iE)/2;

		if (iE<iS)
		{
			break;
		}
	}

	return NULL;
}


// bFind 俊辑 荤侩窍绰 八祸 窃荐 抗力
// bsearch 措脚俊  _lfind( 鉴瞒八祸)甫 静搁 公瘤 蠢覆
compare (const void *_arg1, const void *_arg2 )
{
	// key啊 long蔼老 版快
	long lID = *(long*)_arg1;
	TCData* tpCur = (TCData*)_arg2;

	return( lID - tpCur->lid);
}

//	binary 八祸 基敲 窃荐
void CMem_bFind_Sample()
{
	// 皋葛府 府胶飘 急攫
	CMemList	oMem(sizeof(TCData), 1000);
	unsigned int lCnt =100000; 
	long lID = lCnt/9;

	// 烙狼狼 蔼 措涝
	for (unsigned int kk=0; kk<lCnt; kk++)
	{
		TCData tUnit;
		tUnit.lid = kk;
		tUnit.dData = kk*.1;
		sprintf(tUnit.cpName, "Name:%d",kk);
		oMem.add (&tUnit);
	}

	// binary search 角力 利侩抗
	// pRes俊 搬苞 蔼捞 甸绢埃促.
	TCData* pRes = (TCData*)bsearch( &lID, oMem.getHead (), &lCnt, sizeof(TCData), compareMem );

	if (pRes)
		printf("\n find data , [%s]", pRes->cpName);
	else
		printf("\n not find data ");
}
*/



typedef struct tagArraryPointList
{
	void * vpPtr;
}TArrayPointList;

class  CMemListArray 
{
	CMemList oArr;

public:
	CMemListArray ();

	void	*	add (void * _tpData);
	void	*	add (void * _tpData, int _iNth);

	void		init (int _lSize, int _iIncSize=100);
	long		count();
	void	*	getData (int _iNth);  // zero base
	void	*	getHead ();
	int			del (int _iNth);  // zero base
	void		delAll ();
	int			getBlockSize ();
	void		qSort ( int (* SortFunc) (const void* ele1, const void* ele2)); 

};

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?