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

# dkcLZSS.h

LZSS圧縮 [詳細]

`#include "dkcOSIndependent.h"`

dkcLZSS.hのインクルード依存関係図

このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

## 構成
struct | dkc_LZSS
struct | dkc_LZSS_Header
## マクロ定義
#define | LZSS_RING_LENGTH 4096
| < 環状バッファの大きさ 環状バッファのマスク
#define | LZSS_RING_MASK (LZSS_RING_LENGTH-1)
| 最長一致長
#define | LZSS_LONGEST_MATCH 16
#define | dkcdLZSS_SIGNATURE edk_LZSS_SIGNATURE
| LZSSのシグネチャ（変更しても大丈夫だよ〜（多分))
## 型定義
typedef dkc_LZSS | DKC_LZSS
typedef dkc_LZSS_Header | DKC_LZSS_HEADER
## 関数
DKC_EXTERN DKC_LZSS *WINAPI | dkcAllocLZSS ()
DKC_EXTERN int WINAPI | dkcFreeLZSS (DKC_LZSS **)
DKC_EXTERN int WINAPI | dkcLZSSDecode (DKC_LZSS *ptr, DKC_LZSS_HEADER *ph, BYTE *dest, size_t dsize, const BYTE *src, size_t ssize, ULONG sig)
DKC_EXTERN int WINAPI | dkcLZSSEncode (DKC_LZSS *ptr, DKC_LZSS_HEADER *ph, BYTE *dest, size_t dsize, const BYTE *src, size_t ssize, size_t CloseProcessSize, ULONG sig)

## 説明

LZSS圧縮

から:
  2004/04/20

作者:
  Original:Lee Noriyuki / Reconstruction:d金魚

dkcLZSS.h で定義されています。

## マクロ定義

#define dkcdLZSS_SIGNATURE edk_LZSS_SIGNATURE

| LZSSのシグネチャ（変更しても大丈夫だよ〜（多分)) dkcLZSS.h の 21 行で定義されています。

#define LZSS_LONGEST_MATCH 16

| dkcLZSS.h の 19 行で定義されています。 参照元 Decode(), Encode(), と InsertNode().

#define LZSS_RING_LENGTH 4096

| < 環状バッファの大きさ 環状バッファのマスク dkcLZSS.h の 15 行で定義されています。 参照元 Decode(), Encode(), InitTree(), と InsertNode().

#define LZSS_RING_MASK (LZSS_RING_LENGTH-1)

| 最長一致長 dkcLZSS.h の 17 行で定義されています。

## 型定義

typedef struct dkc_LZSS DKC_LZSS

typedef struct dkc_LZSS_Header DKC_LZSS_HEADER

## 関数

DKC_EXTERN DKC_LZSS* WINAPI dkcAllocLZSS | ( |  | ) |

| dkcLZSS.c の 497 行で定義されています。 参照先 dkcAllocate().
    00498 {
    00499     DKC_LZSS *p = dkcAllocate(sizeof(DKC_LZSS));
    00500     return p;
    00501 }

DKC_EXTERN int WINAPI dkcFreeLZSS | ( | DKC_LZSS ** |  | ) |

| dkcLZSS.c の 503 行で定義されています。 参照先 dkcFree(), と NULL.
    00503                                     {
    00504     if(NULL==p || NULL==*p) return edk_FAILED;
    00505     return dkcFree((void **)p);
    00506 }

DKC_EXTERN int WINAPI dkcLZSSDecode | ( | DKC_LZSS * | ptr,
|  | DKC_LZSS_HEADER * | ph,
|  | BYTE * | dest,
|  | size_t | dsize,
|  | const BYTE * | src,
|  | size_t | ssize,
|  | ULONG | sig
| ) |

  | 引数:
  | ptr[in][out] | dkcAllocLZSS()で取得したポインタ
  | ph[out] | DKC_LZSS_HEADERへのポインタ
  | dest[out] | デコードされたデータの書き出しバッファへのポインタ
  | dsize[in] | destのサイズ
  | src[in] | バッファへのポインタ
  | ssize[in] | srcのサイズ
  | sig[in] | dkcLZSSEncode()の時、指定したシグネチャID
戻り値: edk_Resultのどれかが返る。 覚え書き: DKC_LZSS_HEADERのメンバのmOriginSizeよりdsizeが小さいとこの関数は失敗します。 dkcLZSS.c の 509 行で定義されています。 参照先 Decode(), FALSE, dkc_LZSS_Header::mOriginSize, dkc_LZSS_Header::mSignature, と NULL.
    00511 {
    00512     if(NULL==ptr || NULL==ph)
    00513         return edk_ArgumentException;
    00514
    00515     if(ph->mOriginSize > dsize){
    00516         return edk_BufferOverFlow;
    00517         }
    00518     //if(dkcLZSSIsLZSS(ph)==FALSE){
    00519     if(ph->mSignature != sig){
    00520         return edk_FAILED;
    00521         }
    00522
    00523     if(FALSE==Decode(ptr,ph,src,dest)){
    00524         return edk_FAILED;
    00525         }
    00526
    00527     return edk_SUCCEEDED;
    00528
    00529 }

DKC_EXTERN int WINAPI dkcLZSSEncode | ( | DKC_LZSS * | ptr,
|  | DKC_LZSS_HEADER * | ph,
|  | BYTE * | dest,
|  | size_t | dsize,
|  | const BYTE * | src,
|  | size_t | ssize,
|  | size_t | CloseProcessSize,
|  | ULONG | sig
| ) |

  | 引数:
  | ptr[in][out] | dkcAllocLZSS()で取得したポインタ
  | ph[out] | DKC_LZSS_HEADERへのポインタ
  | dest[out] | LZSSで圧縮されたデータの書き出しバッファへのポインタ
  | dsize[in] | destのサイズ
  | src[in] | バッファへのポインタ
  | ssize[in] | srcのサイズ
  | CloseProcessSize[in] | 処理を打ち切りにするサイズ dsizeより小さくするのがセオリー
  | sig[in] | LZSSだと証明するシグネチャ
戻り値: edk_Resultのどれかが返る。圧縮する価値の無い場合はedk_NoValueToProcessが返る。 dkcLZSS.c の 531 行で定義されています。 参照先 dkcmNOT_ASSERT, Encode(), dkc_LZSS_Header::mCompressedSize, dkc_LZSS_Header::mOriginSize, dkc_LZSS_Header::mSignature, と NULL.
    00534 {
    00535     unsigned long comped;
    00536     int result;
    00537
    00538     if(NULL==ptr || NULL==ph)
    00539         return edk_ArgumentException;
    00540
    00541     dkcmNOT_ASSERT(NULL==dest || 0==dsize);
    00542
    00543
    00544     result = Encode(ptr,src,ssize,dest,dsize,&comped,CloseProcessSize);
    00545     if(DKUTIL_FAILED(result))
    00546     {
    00547         return result;
    00548     }
    00549     ph->mOriginSize = (size_t)ssize;
    00550     ph->mCompressedSize = comped;
    00551     ph->mSignature =  sig;
    00552
    00553     return result;
    00554
    00555 }