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 + -
显示快捷键?