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

# 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