⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memhash.cpp

📁 linux 上http email 协议分析程序 主要能够处理大数据量的主干网的应用
💻 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 + -