メインページ | アルファベット順一覧 | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcLZW.h

説明を見る。
00001 
00021 #ifndef DKUTILC_LZW_H
00022 #define DKUTILC_LZW_H
00023 
00024 
00025 #include "dkcOSIndependent.h"
00026 #include "dkcRedBlackTree.h"
00027 #include "dkcBit.h"
00028 
00029 
00030 
00032 #define dkcdLZW_SIGNATURE edk_LZW_SIGNATURE
00033 
00034 //#define dkcdLZW_SIGNATURE 'LZW'
00035 
00036 //**********************************************************
00037 //TST
00038 
00039 
00041 #define dkcdLZW_CODE_SIZE 15
00042 
00043 #define  dkcdLZW_NUM (1 << dkcdLZW_CODE_SIZE)
00044 
00045 #define  dkcdLZW_NIL(objp) objp->sentinel//(&(objp->sentinel))
00046 
00047 #define dkcdLZW_NIL_OFFSET dkcdLZW_NUM
00048 
00049 
00050 //**********************************************************
00051 //hash
00052 
00054 #define dkcdLZW_HASH_TABLE_SIZE 32749 
00055 
00056 #define dkcmLZW_HASH_FUNC(node,c) ((((node) << 8) + (c)) % dkcdLZW_HASH_TABLE_SIZE)
00057 
00059 #define dkcdLZW_DATA int
00060 
00061 #define dkcdLZW_COLOR uint8
00062 
00064 typedef struct dkc_LZW_Node{
00066     dkcdLZW_DATA code;
00068     struct dkc_LZW_Node *parent;
00070     struct dkc_LZW_Node *left;
00072     struct dkc_LZW_Node *middle;
00074     struct dkc_LZW_Node *right;
00076     dkcdLZW_COLOR color;
00077 }DKC_LZW_NODE;
00078 
00079 typedef struct dkc_LZW_Trie{
00080     dkcdLZW_DATA code;
00081     dkcdLZW_DATA p;
00082 }DKC_LZW_TRIE;
00083 
00084 typedef struct dkc_LZW
00085 {
00086     
00087     union{
00089         DKC_LZW_NODE tst[dkcdLZW_NUM];
00090         DKC_LZW_TRIE trie[dkcdLZW_NUM];
00092     }pool;
00094     dkcdLZW_DATA *hash_table;
00096     dkcdLZW_DATA *hash_stack;
00098     size_t node_count;
00099 
00100     DKC_LZW_NODE *sentinel;
00101 
00102     DKC_BIT_MEMORYSTREAM *mbs;
00103 }DKC_LZW;
00104 
00105 typedef struct dkc_LZW_Header{
00106     unsigned long mSignature;
00108     size_t mOriginSize;
00110     size_t mCompressedSize;
00112     ULONG option;
00113 }DKC_LZW_HEADER;
00114 
00115 enum edk_LZW_Option{
00117     edkcLZW_Default = 0,
00119     edkcLZW_Variableness = 1,
00121     edkcLZW_TST = 2,
00123     edkcLZW_HASH = 4,
00125     edkcLZW_REDBLACK = 8,
00127     edkcLZW_TRIE = 16,
00128     
00129 };
00133 DKC_EXTERN DKC_LZW *WINAPI dkcAllocLZW(size_t output_block_size);
00134 
00135 DKC_EXTERN int WINAPI dkcFreeLZW(DKC_LZW **);
00148 DKC_EXTERN int WINAPI dkcLZWDecode(DKC_LZW *ptr,DKC_LZW_HEADER *ph,
00149     BYTE *dest,size_t dsize,const BYTE *src,size_t ssize,ULONG sig);
00161 DKC_EXTERN int WINAPI dkcLZWEncode(DKC_LZW *ptr,DKC_LZW_HEADER *ph,
00162     BYTE *dest,size_t dsize,const BYTE *src,size_t ssize,
00163     size_t CloseProcessSize,ULONG sig,ULONG option);
00164 
00165 
00166 
00167 //headerがLZWのシグネチャかどうか確認する @return TRUEでLZWデータだと思う。
00168 //廃止:シグネチャは自由に設定できるように!!
00169 //DKC_EXTERN BOOL WINAPI dkcLZWIsLZW(DKC_LZW_HEADER *p);
00170 
00172 #define dkcLZWDump(lzwobj,filename) dkcBitMemoryStreamDump(lzwobj->mbs,filename,edkcDumpNowOffset)
00173 
00174 
00175 #endif //end of include once

dkutil_cに対してSat Sep 10 09:23:55 2005に生成されました。  doxygen 1.4.4