chv.cpp

来自「linux 上http email 协议分析程序 主要能够处理大数据量的主干网」· C++ 代码 · 共 156 行

CPP
156
字号
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
#include <Utility.h>
#include "Chv.h"

void Chv::init(char *pheads)
{
	
	char szbuf[1024];
	char *p=pheads;

	assert(pheads!=NULL);
	m_itotfield=0;
	while(p!=NULL)
	{
		p=strchr(p+1,',');
		m_itotfield++;
	}
		
	m_pfield=new _Tfield[m_itotfield];

	strcpy(szbuf,pheads);

	p=strtok(szbuf,",");
	int i=0;
	while(p!=NULL)
	{
		strcpy((m_pfield+i)->fieldname,p);
		i++;
		p=strtok(NULL,",");
	}

}

int Chv::gettotavail()
{
	return m_itotavail;
}

void Chv::clear()
{
	m_itotavail=0;
	for(int i=0;i<m_itotfield;i++)
	{
		*(m_pfield+i)->fieldvalue=0;
		(m_pfield+i)->bvail=false;
	}
}

void Chv::clear(char *keyname)
{
	
	for(int i=0;i<m_itotfield;i++)
	{
		if(strcasecmp(keyname,(m_pfield+i)->fieldname)==0)
		{
			if((m_pfield+i)->bvail)
			{
				*(m_pfield+i)->fieldvalue=0;
				(m_pfield+i)->bvail=false;
				m_itotavail--;
			}
			return;
		}
	}
}

int Chv::searchField(char *cfieldname)
{
	for(int i=0;i<m_itotfield;i++)
	{
		if(strcasecmp((m_pfield+i)->fieldname,cfieldname)==0)
			return i;
	}
	return -1;
}


void Chv::setValues(Cmimestream *pstream)
{
	int len;
	char szbuf[2048+1];
	char szname[128];
	
	char *p;
	int id;

	while(1)
	{
		len=pstream->getLine(szbuf,2048);
		if(len<=0)
			return ;
		/*#ifdef DEBUG
			printf("[%s]\n",szbuf);
		#endif*/ 
		p=strchr(szbuf,':');
				
		if(p!=NULL)
		{
			int ihdlen=p-szbuf;
			if(ihdlen<sizeof(szname))
			{
				memcpy(szname,szbuf,ihdlen);
				szname[ihdlen]=0;
				TU::delSpace(szname);
				id=searchField(szname);
				if(id>=0)
				{
					strcpy((m_pfield+id)->fieldvalue,p+1);
					TU::delSpace((m_pfield+id)->fieldvalue);
					/*#ifdef DEBUG
						printf("name=[%s] ",szname);
						printf("val=[%s]\n",(m_pfield+id)->fieldvalue);
					#endif*/
					(m_pfield+id)->bvail=true;
					m_itotavail++;
				}
			}
		}
	}
}

char *Chv::getValue(char *phead)
{
	for(int i=0;i<m_itotfield;i++)
	{
		if(strcasecmp((m_pfield+i)->fieldname,phead)==0)
		{
			if((m_pfield+i)->bvail)
				return (m_pfield+i)->fieldvalue;
			return NULL;
		}
	}	
	return NULL;
}

bool Chv::getValue(char *phead,char *pval)
{
	for(int i=0;i<m_itotfield;i++)
	{
		if(strcasecmp((m_pfield+i)->fieldname,phead)==0)
		{
			if((m_pfield+i)->bvail)
			{
				strcpy(pval,(m_pfield+i)->fieldvalue);
				return true;
			}
			else return false;
		}
	}	
	return false;
}

⌨️ 快捷键说明

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