?? decoderbase.h
字號(hào):
#include "assert.h"
#include "cbits.h"
/********************************************
譯碼器基類 V1.00
Copyright(c) 網(wǎng)絡(luò)信息一體化控守系統(tǒng)研制組
該基類的任何修改必須經(jīng)過小組的統(tǒng)一協(xié)商.
!!!所有用戶派生的譯碼器工程必須將所有需要的文件放入同一目錄,
!!!最好使用譯碼器名稱作為目錄名,此目錄下不要包含無關(guān)文件,測試工程
!!!應(yīng)該建立專門的工作目錄和測試派生類,不得在原類的基礎(chǔ)上增加用于
!!!測試的成員
創(chuàng)建日期:2003.6.4
修改歷史:
2003.06.12 增加CSortNameList模版類,支持對(duì)關(guān)鍵詞的查找
*********************************************/
typedef unsigned char u_char;
//
//----------字符集基類---------------------------------
//
class CODEC
{
public:
enum
{
NONE=0, //非編碼字符
ESC=3, //內(nèi)部轉(zhuǎn)義字符
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;
};
//
//------公用資源類,可擴(kuò)充----------------------
//
/*
該資源類用于提供獲取多個(gè)譯碼類共用資源,如代碼表等
*/
//
//--------------------------------
//
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) //嚴(yán)重錯(cuò)誤時(shí)調(diào)用
{
assert(0);
}
};
//
//--------------------------------------------
//
class CDecoderBase
{
public:
char *coderName; //譯碼器名稱
int version; //譯碼器版本 0x0101 為1.1
int type; //譯碼器工作結(jié)果類型
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() //所有譯碼器對(duì)象應(yīng)可重用,調(diào)用reset復(fù)位
{
return true;
}
virtual int is_me(u_char *buf,int len) //測試是否為當(dāng)前類型的文檔
//返回百分比表示的可能性 0表示不是,100表示肯定是
{
return 100;
}
virtual bool decode(u_char *inbuf,int insize, //輸入緩沖區(qū)
u_char *outbuf,int outbufsize //輸出緩沖區(qū),推薦使用
) //只要不出現(xiàn)內(nèi)部錯(cuò)誤,應(yīng)返回真
{
return true;
}
virtual u_char* get_result(int &retsize,int& ret_type) //返回結(jié)果緩沖區(qū),可以不是給定的緩沖區(qū)
{
return NULL;
};
virtual bool continue_decode() //如果還能繼續(xù)解碼,可反復(fù)調(diào)用get_result獲取結(jié)果
{
//當(dāng)無可繼續(xù)譯碼的數(shù)據(jù),實(shí)現(xiàn)類應(yīng)負(fù)責(zé)清除臨時(shí)緩沖區(qū)
return false;
}
};
//
//-------譯碼器基類定義結(jié)束---------------------------------------
//
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -