www.pudn.com > SharedScreen.rar > LZWTABLE.H


#ifndef __LZWTABLE_H 
#define __LZWTABLE_H 
 
/*#ifndef _WINDOWS 
typedef unsigned char BYTE; 
typedef unsigned int UINT; 
typedef UINT WORD; 
typedef unsigned long DWORD; 
#define BOOL    int 
#define TRUE    1 
#define FALSE   0 
#endif*/ 
 
typedef struct LZWEncodeEntry 
{ 
	BYTE bLast; 
	WORD wCode; 
	struct LZWEncodeEntry far *pChild,*pRightBrother; 
}LZWENCODEENTRY,*PLZWENCODEENTRY;      
typedef struct LZWDecodeEntry 
{ 
	BYTE *pbContain; 
}LZWDECODEENTRY,*PLZWDECODEENTRY; 
 
class CLZWDecodeTable 
{ 
public: 
	CLZWDecodeTable(BOOL fInit=TRUE); 
	~CLZWDecodeTable(); 
	void ClearDecodeTable(void); 
	void InitLZWTable(void); 
	BYTE* GetMatchData(WORD wCode); 
	void AddToChild(WORD wCode,BYTE *pbContain,int iLength); 
	DWORD GetTableEntryNumber(void){return m_dwTableEntryNumber;}; 
protected: 
	BYTE** m_pbContain; 
	DWORD m_dwTableEntryNumber; 
}; 
class CLZWEncodeTable 
{ 
public: 
	CLZWEncodeTable(BOOL fInit=TRUE); 
	~CLZWEncodeTable(); 
	void ClearLZWTable(void); 
	void InitLZWTable(void); 
	PLZWENCODEENTRY FindMatchChild(BYTE bChileLast,PLZWENCODEENTRY pCurrent); 
	// return the find child 
	PLZWENCODEENTRY  AddToChild(BYTE bLast,PLZWENCODEENTRY pCurrent); 
	//return the add child 
 
public://inline 
	PLZWENCODEENTRY GetHead(void){return &m_EntryHead;}; 
	DWORD GetTableEntryNumber(void){return m_dwTableEntryNumber;}; 
 
protected: 
	void RemoveFirstChild(void); 
	PLZWENCODEENTRY FindRightBrother(PLZWENCODEENTRY pCurrent); 
protected: 
	DWORD m_dwTableEntryNumber; 
	UINT m_uNextCodeForUse; 
	LZWENCODEENTRY m_EntryHead; 
}; 
 
#endif