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

dkcSerialize.h

簡易シリアライズ、デシリアライズ [詳細]

#include "dkcOSIndependent.h"

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

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

struct  dkc_Serialize
struct  dkc_Deserialize

型定義

typedef dkc_Serialize DKC_SERIALIZE
typedef dkc_Deserialize DKC_DESERIALIZE
typedef int(CALLBACK * DKC_SERIALIZE_F_TYPE )(DKC_SERIALIZE *)

列挙型

enum  edkcSerialize {
  edkcSerializeBufferMode = 0x01, edkcSerializeFileMode = 0x02, edkcSerializeIDStack = 'stac', edkcSerializeIDQueue = 'queu',
  edkcSerializeIDString = 'stri', edkcSerializeIDBuffer = 'buff', edkcSerializeIDMemoryStream = 'mstr', edkcSerializeIDCircularMemoryStream = 'cmst',
  edkcSerializeIDSingleList = 'slis', edkcSerializeID2Tree = '2tre', edkcSerializeIDSingleListObject = 'slio'
}

関数

DKC_EXTERN DKC_SERIALIZE
*WINAPI 
dkcAllocSerialize (UINT mode, const char *filename)
DKC_EXTERN int WINAPI dkcFreeSerialize (DKC_SERIALIZE **ptr)
DKC_EXTERN DKC_DESERIALIZE
*WINAPI 
dkcAllocDeserialize (UINT mode, const char *filename)
DKC_EXTERN int WINAPI dkcFreeDeserialize (DKC_DESERIALIZE **)
DKC_EXTERN int WINAPI dkcDeserializeRead (DKC_DESERIALIZE *ptr, void *data, size_t size, size_t *readsize)
DKC_EXTERN int WINAPI dkcSerializeWrite (DKC_SERIALIZE *ptr, const void *data, size_t size)


説明

簡易シリアライズ、デシリアライズ

d金魚

から:
2004/3/xx

TODO:
作りかけです。使わないでネ^^

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


型定義

typedef struct dkc_Deserialize DKC_DESERIALIZE
 

デシリアライズ構造体

参照元 dkcAllocDeserialize(), dkcAllocMemoryStreamDeserialize(), dkcAllocQueueDeserialize(), dkcAllocSingleListDeserialize(), dkcAllocSingleListObjectDeserialize(), dkcAllocStackDeserialize(), dkcAllocStringDeserialize(), dkcDeserializeRead(), と dkcFreeDeserialize().

typedef struct dkc_Serialize DKC_SERIALIZE
 

シリアライズ構造体

参照元 dkcAllocSerialize(), dkcFreeSerialize(), dkcMemoryStreamSerialize(), dkcQueueSerialize(), dkcSerializeWrite(), dkcSingleListObjectSerialize(), dkcSingleListSerialize(), dkcStackSerialize(), と dkcStringSerialize().

typedef int(CALLBACK * DKC_SERIALIZE_F_TYPE)(DKC_SERIALIZE *)
 

dkcSerialize.h55 行で定義されています。


列挙型

enum edkcSerialize
 

列挙型の値:
edkcSerializeBufferMode 
edkcSerializeFileMode 
edkcSerializeIDStack  DKC_STACKのID.
edkcSerializeIDQueue  DKC_QUEUEのID.
edkcSerializeIDString 
edkcSerializeIDBuffer 
edkcSerializeIDMemoryStream 
edkcSerializeIDCircularMemoryStream 
edkcSerializeIDSingleList 
edkcSerializeID2Tree 
edkcSerializeIDSingleListObject 

dkcSerialize.h15 行で定義されています。

00015                   {
00016 
00017     edkcSerializeBufferMode = 0x01,
00018     edkcSerializeFileMode = 0x02,
00019     /*
00020     edkcSerializeSaveMode = 0x04
00021     edkcSerializeLoadMode = 0x08,
00022     0x10,0x20,0x40,0x80
00023     */
00025     edkcSerializeIDStack = 'stac',
00027     edkcSerializeIDQueue = 'queu',
00028     edkcSerializeIDString = 'stri',
00029     edkcSerializeIDBuffer = 'buff',
00030     edkcSerializeIDMemoryStream = 'mstr',
00031     edkcSerializeIDCircularMemoryStream = 'cmst',
00032     edkcSerializeIDSingleList = 'slis',
00033     edkcSerializeID2Tree = '2tre',
00034     edkcSerializeIDSingleListObject = 'slio',
00035 };


関数

DKC_EXTERN DKC_DESERIALIZE* WINAPI dkcAllocDeserialize UINT  mode,
const char *  filename
 

dkcSerialize.c126 行で定義されています。

参照先 DKC_DESERIALIZE, DKC_MSS__, dkcAllocate(), dkcAllocMemoryStream(), dkcAllocString(), dkcFileSize(), dkcFree(), dkcFreeMemoryStream(), dkcFreeString(), dkcLoadBinary(), dkcmNOT_ASSERT, dkcStringCopy(), DKUTIL_FAILED, edkcSerializeBufferMode, edkcSerializeFileMode, FALSE, dkc_MemoryStream::mBuffer, dkc_Deserialize::mMode, dkc_MemorySerializeSignature::mpMem, dkc_MemorySerializeSignature::mpString, dkc_MemorySerializeSignature::mSerializeFlag, dkc_Deserialize::mSignature, dkc_MemoryStream::mSize, と NULL.

00127 {
00128     DKC_DESERIALIZE *p = NULL;
00129     DKC_MSS__ *pmss = NULL;
00130     size_t len_of_fn = 0;
00131     size_t filesize = dkcFileSize(filename);
00132     size_t readsize = 0;
00133 
00134     p = (DKC_DESERIALIZE *)dkcAllocate(sizeof(DKC_DESERIALIZE));
00135     if(NULL==p) return NULL;
00136     
00137     if(0==filesize) goto Error;
00138     
00139     
00140     if(mode & edkcSerializeBufferMode)
00141     {
00142         len_of_fn = strlen(filename);
00143         pmss = (DKC_MSS__ *)dkcAllocate(sizeof(DKC_MSS__));
00144         if(NULL==pmss) goto Error;
00145 
00146         pmss->mpString = dkcAllocString(len_of_fn);
00147         if(NULL==pmss->mpString) goto Error;
00148         dkcmNOT_ASSERT(DKUTIL_FAILED(
00149             dkcStringCopy( pmss->mpString , filename,len_of_fn)
00150             ));
00151 
00152         
00153         pmss->mpMem = dkcAllocMemoryStream(filesize);
00154         if(NULL==pmss->mpMem) goto Error;
00155 
00156         //ロード
00157         if(DKUTIL_FAILED(
00158             dkcLoadBinary(pmss->mpMem->mBuffer,pmss->mpMem->mSize,filename,&readsize)
00159             )){
00160             goto Error;
00161         }
00162 #   ifdef WIN32
00163         dkcmNOT_ASSERT(readsize != filesize);
00164 #   endif
00165         pmss->mSerializeFlag = FALSE;//serializeしないからFALSE 
00166 
00167         p->mSignature = pmss;
00168 
00169         
00170 
00171     }
00172     else if(mode & edkcSerializeFileMode)
00173     {
00174         
00175         p->mSignature = (void *)fopen(filename,"rb");
00176         if(NULL==p->mSignature) goto Error;
00177     }
00178     else
00179     {
00180         goto Error;
00181     }
00182 
00183     p->mMode = mode;
00184 
00185     return p;
00186 
00187 Error:
00188     if(pmss){
00189         dkcFreeString(&(pmss->mpString));
00190         dkcFreeMemoryStream(&(pmss->mpMem));
00191         dkcFree((void **)&pmss);
00192     }
00193     dkcFree((void **)&p);
00194     return NULL;
00195 
00196 
00197 
00198 }

DKC_EXTERN DKC_SERIALIZE* WINAPI dkcAllocSerialize UINT  mode,
const char *  filename
 

dkcSerialize.c28 行で定義されています。

参照先 DKC_MSS__, DKC_SERIALIZE, dkcAllocate(), dkcAllocMemoryStream(), dkcAllocString(), dkcFree(), dkcFreeMemoryStream(), dkcFreeString(), dkcmNOT_ASSERT, dkcStringCopy(), DKUTIL_FAILED, edkcSerializeBufferMode, edkcSerializeFileMode, gAllocMemoryStreamSize, dkc_Serialize::mMode, dkc_MemorySerializeSignature::mpMem, dkc_MemorySerializeSignature::mpString, dkc_MemorySerializeSignature::mSerializeFlag, dkc_Serialize::mSignature, NULL, と TRUE.

00029 {
00030     DKC_SERIALIZE *p = NULL;
00031     DKC_MSS__ *pmss = NULL;
00032     size_t len_of_fn = 0;
00033 
00034     p = (DKC_SERIALIZE *)dkcAllocate(sizeof(DKC_SERIALIZE));
00035     if(NULL==p) return NULL;
00036     
00037     
00038     if(mode & edkcSerializeBufferMode){
00039         len_of_fn = strlen(filename);
00040         pmss = (DKC_MSS__ *)dkcAllocate(sizeof(DKC_MSS__));
00041         if(NULL==pmss) goto Error;
00042 
00043         pmss->mpString = dkcAllocString(len_of_fn);
00044         if(NULL==pmss->mpString) goto Error;
00045         dkcmNOT_ASSERT(DKUTIL_FAILED(
00046             dkcStringCopy( pmss->mpString , filename,len_of_fn)
00047             ));
00048 
00049         pmss->mpMem = dkcAllocMemoryStream(gAllocMemoryStreamSize);
00050         if(NULL==pmss->mpMem) goto Error;
00051 
00052         pmss->mSerializeFlag = TRUE;//serializeするのでTRUE
00053 
00054         p->mSignature = pmss;
00055     }else if(mode & edkcSerializeFileMode){
00056         
00057         p->mSignature = (void *)fopen(filename,"wb");
00058         if(NULL==p->mSignature) goto Error;
00059     }else{
00060         goto Error;
00061     }
00062 
00063     p->mMode = mode;
00064 
00065     return p;
00066 
00067 Error:
00068     if(pmss){
00069         dkcFreeString(&(pmss->mpString));
00070         dkcFreeMemoryStream(&(pmss->mpMem));
00071         dkcFree((void **)&pmss);
00072     }
00073     dkcFree((void **)&p);
00074     return NULL;
00075 }

DKC_EXTERN int WINAPI dkcDeserializeRead DKC_DESERIALIZE ptr,
void *  data,
size_t  size,
size_t *  readsize
 

dkcSerialize.c222 行で定義されています。

参照先 DKC_DESERIALIZE, DKC_MSS__, dkcMemoryStreamRead(), dkcmNOT_ASSERT, DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcSerializeBufferMode, edkcSerializeFileMode, dkc_MemorySerializeSignature::mpMem, と NULL.

参照元 dkcAllocMemoryStreamDeserialize(), dkcAllocQueueDeserialize(), dkcAllocSingleListDeserialize(), dkcAllocSingleListObjectDeserialize(), dkcAllocStackDeserialize(), と dkcAllocStringDeserialize().

00222                                                                                            {
00223 
00224     DKC_MSS__ *pmss;
00225 
00226     dkcmNOT_ASSERT(NULL==ptr);
00227 
00228     if(ptr->mMode & edkcSerializeBufferMode){
00229         pmss = (DKC_MSS__ *)ptr->mSignature;
00230 
00231         dkcmNOT_ASSERT(DKUTIL_FAILED(
00232             dkcMemoryStreamRead(pmss->mpMem,data,size,readsize)
00233         ));
00234 
00235     }else if(ptr->mMode & edkcSerializeFileMode){
00236         dkcmNOT_ASSERT(1 != fread(data,size,1,(FILE *)ptr->mSignature));
00237     }else{
00238         return edk_FAILED;
00239     }
00240     return edk_SUCCEEDED;
00241 }

DKC_EXTERN int WINAPI dkcFreeDeserialize DKC_DESERIALIZE **   ) 
 

dkcSerialize.c200 行で定義されています。

参照先 DKC_DESERIALIZE, DKC_MSS__, dkcFree(), dkcFreeMemoryStream(), dkcFreeString(), edk_FAILED, edkcSerializeBufferMode, edkcSerializeFileMode, dkc_Deserialize::mMode, dkc_MemorySerializeSignature::mpMem, dkc_MemorySerializeSignature::mpString, dkc_Deserialize::mSignature, と NULL.

00201 {
00202     DKC_MSS__ *pmss;
00203     DKC_DESERIALIZE *ps;
00204     if(NULL==ptr || NULL==*ptr || NULL==(*ptr)->mSignature){
00205         return edk_FAILED;
00206     }
00207     ps = (*ptr);
00208     if(ps->mMode & edkcSerializeBufferMode){
00209         pmss = (DKC_MSS__ *)ps->mSignature;
00210 
00211         dkcFreeMemoryStream(&(pmss->mpMem));
00212         dkcFreeString(&(pmss->mpString));
00213         dkcFree((void **)&pmss);
00214     }else if(ps->mMode & edkcSerializeFileMode){
00215         fclose((FILE *)ps->mSignature);
00216     }else{
00217         return edk_FAILED;
00218     }
00219     return dkcFree((void **)ptr);
00220 }

DKC_EXTERN int WINAPI dkcFreeSerialize DKC_SERIALIZE **  ptr  ) 
 

DKC_SERIALIZEをデリート dkcAllocSerializeと対。

dkcSerialize.c77 行で定義されています。

参照先 DKC_MSS__, DKC_SERIALIZE, dkcFree(), dkcFreeMemoryStream(), dkcFreeString(), dkcSaveBinary(), dkcStringPointer(), edk_FAILED, edkcSerializeBufferMode, edkcSerializeFileMode, dkc_MemoryStream::mBuffer, dkc_Serialize::mMode, dkc_MemoryStream::mNowOffset, dkc_MemorySerializeSignature::mpMem, dkc_MemorySerializeSignature::mpString, dkc_Serialize::mSignature, と NULL.

00078 {
00079     DKC_MSS__ *pmss;
00080     DKC_SERIALIZE *ps;
00081     if(NULL==ptr || NULL==*ptr || NULL==(*ptr)->mSignature){
00082         return edk_FAILED;
00083     }
00084     ps = (*ptr);
00085     if(ps->mMode & edkcSerializeBufferMode){
00086         pmss = (DKC_MSS__ *)ps->mSignature;
00087 
00088         /* ここで 保存 */
00089         dkcSaveBinary(pmss->mpMem->mBuffer,pmss->mpMem->mNowOffset,
00090             dkcStringPointer(pmss->mpString)
00091         );
00092 
00093         dkcFreeMemoryStream(&(pmss->mpMem));
00094         dkcFreeString(&(pmss->mpString));
00095         dkcFree((void **)&pmss);
00096     }else if(ps->mMode & edkcSerializeFileMode){
00097         fclose((FILE *)ps->mSignature);
00098     }else{
00099         return edk_FAILED;
00100     }
00101 
00102     return dkcFree((void **)ptr);
00103 }

DKC_EXTERN int WINAPI dkcSerializeWrite DKC_SERIALIZE ptr,
const void *  data,
size_t  size
 

dkcSerialize.c106 行で定義されています。

参照先 DKC_MSS__, DKC_SERIALIZE, dkcMemoryStreamDynamicWrite(), dkcmNOT_ASSERT, DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, edkcSerializeBufferMode, edkcSerializeFileMode, dkc_MemorySerializeSignature::mpMem, と NULL.

参照元 dkcMemoryStreamSerialize(), dkcQueueSerialize(), dkcSingleListObjectSerialize(), dkcSingleListSerialize(), dkcStackSerialize(), と dkcStringSerialize().

00106                                                                              {
00107     DKC_MSS__ *pmss;
00108     dkcmNOT_ASSERT(NULL==ptr);
00109 
00110     if(ptr->mMode & edkcSerializeBufferMode){
00111         pmss = (DKC_MSS__ *)ptr->mSignature;
00112         if(DKUTIL_FAILED(
00113             dkcMemoryStreamDynamicWrite(pmss->mpMem,data,size)
00114             )){
00115             return edk_FAILED;
00116         }
00117 
00118     }else if(ptr->mMode & edkcSerializeFileMode){
00119         dkcmNOT_ASSERT(1 != fwrite(data,size,1,(FILE *)ptr->mSignature));
00120     }else{
00121         return edk_FAILED;
00122     }
00123     return edk_SUCCEEDED;
00124 }


dkutil_cに対してTue Dec 7 01:10:31 2004に生成されました。 doxygen 1.3.6