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

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

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.h54 行で定義されています。


列挙型

enum edkcSerialize
 

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

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

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


関数

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

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

参照先 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.

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

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

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

参照先 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.

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

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

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

参照先 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().

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

DKC_EXTERN int WINAPI dkcFreeDeserialize DKC_DESERIALIZE **   ) 
 

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

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

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

DKC_EXTERN int WINAPI dkcFreeSerialize DKC_SERIALIZE **  ptr  ) 
 

DKC_SERIALIZEをデリート dkcAllocSerializeと対。

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

参照先 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.

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

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

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

参照先 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().

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


dkutil_cに対してSun Jul 18 22:46:05 2004に生成されました。 doxygen 1.3.6