📄 memhash.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include "MemHash.h"
CMemHash::CMemHash(int ibasecount,int isparecount,int inodesize)
{
assert(ibasecount>0);
assert(isparecount>3);
m_ibasecount=ibasecount;
m_isparecount=isparecount;
m_itotcount=ibasecount+isparecount;
m_pbase=new char[m_itotcount*inodesize];
assert(m_pbase!=NULL);
m_pspare=(char *)m_pbase+inodesize*ibasecount;
m_pnode=new TMNode[isparecount] ;
assert(m_pnode!=NULL);
int j;
for( j=0;j<isparecount-1;j++)
{
m_pnode[j].inext=j+1;
}
m_pnode[j].inext=-1;
//m_info.pbegin;
//m_info.pend;
m_info.isize=inodesize;
m_info.icount=isparecount;
m_info.ihead=0;
m_info.itail=isparecount-1;
m_info.ifree=isparecount;
}
int CMemHash::aloc()
{
//printf("to aloc=ifree [%d]\n",m_info.ifree);
//printf(" ihead[%d] pause..\n",m_info.ihead);
//getchar();
if(m_info.ifree<3)
return -1;
int ihead=m_info.ihead;
//printf(" ihead[%d] inext=[%d]\n",ihead,m_pnode[ihead].inext);
m_info.ihead=m_pnode[ihead].inext;
m_info.ifree--;
//printf("aloc ret [%d][%d],pause...\n",ihead+m_ibasecount,m_ibasecount);
//getchar();
return ihead+m_ibasecount;
}
bool CMemHash::free(int id)
{
id=id-m_ibasecount;
if(id<0 || id>=m_isparecount)
return false;
int itail=m_info.itail;
m_pnode[itail].inext=id;
m_pnode[id].inext=-1;
m_info.itail=id;
m_info.ifree++;
return true;
}
CMemHash::~CMemHash()
{
delete (char *)m_pbase;
delete (char *)m_pspare;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -