メインページ | 構成 | ファイル一覧 | 構成メンバ | ファイルメンバ | 関連ページ

dkcRLE.h

#include "dkcOSIndependent.h"
#include "dkcMemoryStream.h"
#include "dkcRLE.c"

trash/dkcRLE.hのインクルード依存関係図

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

struct  dkc_RLE
struct  dkc_RLE_Header
struct  dkc_RLE_Comp
struct  dkc_RLE_NoComp

マクロ定義

#define dkcdRLE_EOF_ID   0x00
#define dkcdRLE_NOCOMPRESS_ID   0x01
#define dkcdRLE_SIGNATURE   'RLE\0'
 RLEのシグネチャ(変更しても大丈夫だよ〜(多分)).


型定義

typedef dkc_RLE DKC_RLE
typedef dkc_RLE_Header DKC_RLE_HEADER
typedef dkc_RLE_Comp DKC_RLE_COMP
typedef dkc_RLE_NoComp DKC_RLE_NOCOMP

関数

DKC_EXTERN DKC_RLE *WINAPI dkcAllocRLE ()
DKC_EXTERN int WINAPI dkcFreeRLE (DKC_RLE **)
DKC_EXTERN int WINAPI dkcRLEEncode (DKC_RLE *ptr, DKC_MEMORYSTREAM *pms, DKC_RLE_HEADER *ph, const BYTE *src, USHORT ssize, size_t CloseProcessSize, ULONG sig, BYTE aEOF_ID, BYTE aABS_ID)
DKC_EXTERN int WINAPI dkcRLEDecode (DKC_RLE *p, DKC_MEMORYSTREAM *pms, const DKC_RLE_HEADER *ph, const BYTE *src, USHORT ssize, ULONG sig)


マクロ定義

#define dkcdRLE_EOF_ID   0x00
 

trash/dkcRLE.h32 行で定義されています。

#define dkcdRLE_NOCOMPRESS_ID   0x01
 

trash/dkcRLE.h34 行で定義されています。

#define dkcdRLE_SIGNATURE   'RLE\0'
 

RLEのシグネチャ(変更しても大丈夫だよ〜(多分)).

trash/dkcRLE.h36 行で定義されています。


型定義

typedef struct dkc_RLE DKC_RLE
 

typedef struct dkc_RLE_Comp DKC_RLE_COMP
 

typedef struct dkc_RLE_Header DKC_RLE_HEADER
 

typedef struct dkc_RLE_NoComp DKC_RLE_NOCOMP
 


関数

DKC_EXTERN DKC_RLE* WINAPI dkcAllocRLE  ) 
 

dkcRLE.c12 行で定義されています。

参照先 DKC_RLE, と dkcAllocate().

00012                              {
00013     DKC_RLE *p = (DKC_RLE *)dkcAllocate(sizeof(DKC_RLE));
00014     return p;
00015 }

DKC_EXTERN int WINAPI dkcFreeRLE DKC_RLE **   ) 
 

dkcRLE.c17 行で定義されています。

参照先 DKC_RLE, dkcFree(), edk_FAILED, と NULL.

00017                                    {
00018     if(NULL==pp){
00019         return edk_FAILED;
00020     }
00021     return dkcFree((void **)pp);
00022 }

DKC_EXTERN int WINAPI dkcRLEDecode DKC_RLE p,
DKC_MEMORYSTREAM pms,
const DKC_RLE_HEADER ph,
const BYTE src,
USHORT  ssize,
ULONG  sig
 

引数:
ptr[in][out] dkcAllocRLE()で取得したポインタ
pms[in][out] dkcAllocMemoryStream()で取得したMemory Stream Objectへのポインタ
ph[out] DKC_RLE_HEADERへのポインタ
src[in] バッファへのポインタ
ssize[in] srcのサイズ
sig[in] RLEだと証明するシグネチャ
戻り値:
edk_Resultのどれかが返る。圧縮する価値の無い場合はedk_NoValueToProcessが返る。

trash/dkcRLE.c251 行で定義されています。

参照先 BYTE, DKC_RLE, DKC_RLE_HEADER, DKC_RLE_NOCOMP, dkcMemoryStreamSeek(), dkcMemoryStreamTell, dkcMemoryStreamWrite(), edk_FAILED, edk_SignatureException, edk_SUCCEEDED, edkcMemoryStreamSeekSet, dkc_RLE_Header::mABS, dkc_RLE_Header::mEOF, dkc_RLE_Header::mSignature, と dkc_RLE::mTemp.

00254 {
00255 
00256     size_t i=0;
00257     BYTE t;
00258     //DKC_RLE_COMP co;
00259     DKC_RLE_NOCOMP nco;
00260     //今のオフセット
00261     size_t old_mem_offset = dkcMemoryStreamTell(pms);
00262     
00263     if(ph->mSignature != sig){
00264         return edk_SignatureException;
00265     }
00266 
00267     for(;i<ssize;i++)
00268     {
00269         t = src[i];
00270         if(t==ph->mABS){
00271             memcpy(&nco,&src[i],sizeof(nco));
00272             dkcMemoryStreamWrite(pms,&src[i],nco.length);
00273         }
00274         else if(t == ph->mEOF)
00275         {
00276             break;
00277         }else{//compressed
00278             if(t <= 1){
00279                 goto BACK;
00280             }
00281             memset(p->mTemp,src[i + 1],t);
00282             dkcMemoryStreamWrite(pms,&(p->mTemp),t);
00283 
00284             //一つ分update
00285             i++;
00286         }
00287     }//end of for
00288     
00289     return edk_SUCCEEDED;
00290 BACK:
00291 
00292     dkcMemoryStreamSeek(pms,old_mem_offset,edkcMemoryStreamSeekSet);
00293 
00294     return edk_FAILED;
00295 
00296 
00297 }

DKC_EXTERN int WINAPI dkcRLEEncode DKC_RLE ptr,
DKC_MEMORYSTREAM pms,
DKC_RLE_HEADER ph,
const BYTE src,
USHORT  ssize,
size_t  CloseProcessSize,
ULONG  sig,
BYTE  aEOF_ID,
BYTE  aABS_ID
 

引数:
ptr[in][out] dkcAllocRLE()で取得したポインタ
ph[out] DKC_RLE_HEADERへのポインタ
dest[out] デコードされたデータの書き出しバッファへのポインタ
dsize[in] destのサイズ
src[in] バッファへのポインタ
ssize[in] srcのサイズ
sig[in] dkcRLEEncode()の時、指定したシグネチャID
CloseProcessSize[in] 処理を打ち切りにするサイズ
aEOF_ID[in] RLEのEOFを示す値≠指定する事を奨励する
aABS_ID[in] RLEの非圧縮を示す値 dkcdRLE_NOCOMPRESS_IDを指定する事を奨励する
戻り値:
戻り値はedk_SUCCEEDEDで成功。 どちらの条件でも処理を打ち切りにするサイズを超えたらedk_NoValueToProcessが返る。 それ以外はその戻り値によって各自判断。
覚え書き:
DKC_RLE_HEADERのメンバのmOriginSizeよりdsizeが小さいとこの関数は失敗します。

trash/dkcRLE.c195 行で定義されています。

参照先 BYTE, DKC_RLE, DKC_RLE_HEADER, dkcMemoryStreamSeek(), dkcMemoryStreamTell, dkcmNOT_ASSERT, DKUTIL_FAILED, edk_FAILED, edk_NoValueToProcess, edk_SUCCEEDED, edkcMemoryStreamSeekSet, getRLE(), dkc_RLE_Header::mABS, dkc_RLE_Header::mCompressedSize, dkc_RLE_Header::mEOF, dkc_RLE_Header::mOriginSize, dkc_RLE_Header::mSignature, と dkc_RLE::mTemp.

00198 {
00199     
00200     //dest couter
00201     size_t i = 0;
00202     //戻り値
00203     int r = edk_FAILED;
00204     //テンポラリ
00205     int tr;
00206 
00207 
00208     /*
00209     0 最初の状態
00210     1 圧縮書きこみ中
00211     2 非圧縮書き込み中
00212     */
00213     //int state = 0;
00214     //今のオフセット
00215     size_t old_mem_offset = dkcMemoryStreamTell(pms);
00216     //全部倒す
00217     memset(p->mTemp,0,sizeof(p->mTemp));
00218 
00219 
00220     if( i < ssize){
00221 
00222         tr = getRLE(pms,src,ssize,i,aABS_ID,CloseProcessSize,old_mem_offset);
00223         if(DKUTIL_FAILED(tr)){
00224             goto BACK;
00225         }
00226         if(dkcMemoryStreamTell(pms) - old_mem_offset >= CloseProcessSize)
00227         {
00228             return  edk_NoValueToProcess;
00229         
00230         }   
00231         r = edk_SUCCEEDED;
00232     }
00233     ph->mABS = aABS_ID;
00234     ph->mEOF = aEOF_ID;
00235     dkcmNOT_ASSERT(USHRT_MAX < dkcMemoryStreamTell(pms) - old_mem_offset);
00236     ph->mCompressedSize = (USHORT)(dkcMemoryStreamTell(pms) - old_mem_offset);
00237     ph->mOriginSize = ssize;
00238     ph->mSignature = sig;
00239 
00240 
00241     return r;
00242 BACK:
00243     //元に戻す・・・。なんか今までの処理が無駄っぽい・・・。゚(゚´Д`゚)゚。
00244     dkcMemoryStreamSeek(pms,old_mem_offset,edkcMemoryStreamSeekSet);
00245     return r;
00246 }


dkutil_cに対してTue Oct 19 03:36:10 2004に生成されました。 doxygen 1.3.6