📄 decoderbase.h
字号:
#include "assert.h"
#include "cbits.h"
/********************************************
译码器基类 V1.00
Copyright(c) 网络信息一体化控守系统研制组
该基类的任何修改必须经过小组的统一协商.
!!!所有用户派生的译码器工程必须将所有需要的文件放入同一目录,
!!!最好使用译码器名称作为目录名,此目录下不要包含无关文件,测试工程
!!!应该建立专门的工作目录和测试派生类,不得在原类的基础上增加用于
!!!测试的成员
创建日期:2003.6.4
修改历史:
2003.06.12 增加CSortNameList模版类,支持对关键词的查找
*********************************************/
typedef unsigned char u_char;
//
//----------字符集基类---------------------------------
//
class CODEC
{
public:
enum
{
NONE=0, //非编码字符
ESC=3, //内部转义字符
BLANK='?'
};
char *codecName;
int codePage;
unsigned short *tbl; //size [65536];
public:
CODEC() {tbl=NULL;};
virtual ~CODEC() {};
virtual unsigned short translate(u_char *pch,int &size)=0;
};
//
//------公用资源类,可扩充----------------------
//
/*
该资源类用于提供获取多个译码类共用资源,如代码表等
*/
//
//--------------------------------
//
class CPublicResource
{
public:
CODEC* FindCodec(int cp);
CODEC* FindCodec(const char *name);
CODEC* TestCodec(const char *,int len); //检测指定字符串的字符集
int ver;
public:
CPublicResource();
~CPublicResource();
void writelog(char *msg,...); //输出日志信息,格式同printf
void fatal(char *str) //严重错误时调用
{
assert(0);
}
};
//
//--------------------------------------------
//
class CDecoderBase
{
public:
char *coderName; //译码器名称
int version; //译码器版本 0x0101 为1.1
int type; //译码器工作结果类型
CPublicResource *pub;
public:
enum
{
UNKNOWN_TYPE,
IS_UNICODE,
IS_ASCII,
IS_IMAGE,
IS_BINARY,
IS_FAX
};
public:
CDecoderBase(CPublicResource *ps)
{
pub=ps;
}
virtual ~CDecoderBase()
{
}
virtual bool reset() //所有译码器对象应可重用,调用reset复位
{
return true;
}
virtual int is_me(u_char *buf,int len) //测试是否为当前类型的文档
//返回百分比表示的可能性 0表示不是,100表示肯定是
{
return 100;
}
virtual bool decode(u_char *inbuf,int insize, //输入缓冲区
u_char *outbuf,int outbufsize //输出缓冲区,推荐使用
) //只要不出现内部错误,应返回真
{
return true;
}
virtual u_char* get_result(int &retsize,int& ret_type) //返回结果缓冲区,可以不是给定的缓冲区
{
return NULL;
};
virtual bool continue_decode() //如果还能继续解码,可反复调用get_result获取结果
{
//当无可继续译码的数据,实现类应负责清除临时缓冲区
return false;
}
};
//
//-------译码器基类定义结束---------------------------------------
//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -