#include "dkcOSIndependent.h"
#include "dkcBuffer.h"
#include "dkcSerialize.h"
dkcSingleList.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_SingleList |
struct | dkc_SingleListObject |
マクロ定義 | |
#define | dkcSingleListDynamicSetBuffer(p, d, s) dkcSingleListSetBuffer(p,d,s) |
#define | dkcFreeSingleListBuffer(p) dkcFreeBuffer(p) |
型定義 | |
typedef dkc_SingleList | DKC_SINGLELIST |
typedef dkc_SingleListObject | DKC_SINGLELIST_OBJECT |
関数 | |
DKC_EXTERN DKC_SINGLELIST *WINAPI | dkcAllocSingleList (const void *data, size_t size) |
シングルリスト領域を得る。 | |
DKC_EXTERN int WINAPI | dkcFreeSingleList (DKC_SINGLELIST **ptr) |
dkcAllocNewSingleList()で確保したリスト領域と内部バッファを削除。dkcAllocNewSingleListと対。 | |
DKC_EXTERN int WINAPI | dkcSingleListInsert (DKC_SINGLELIST *ptr, const void *data, size_t size) |
DKC_EXTERN void WINAPI | dkcSingleListChain (DKC_SINGLELIST *ptr, DKC_SINGLELIST *nextp) |
DKC_EXTERN size_t WINAPI | dkcSingleListSize (DKC_SINGLELIST *top) |
DKC_EXTERN DKC_SINGLELIST *WINAPI | dkcSingleListErase (DKC_SINGLELIST *ptr) |
DKC_EXTERN int WINAPI | dkcSingleListGetBuffer (DKC_SINGLELIST *ptr, void *data, size_t size) |
DKC_EXTERN int WINAPI | dkcSingleListSetBuffer (DKC_SINGLELIST *ptr, const void *data, size_t size) |
DKC_EXTERN DKC_BUFFER *WINAPI | dkcAllocSingleListBuffer (const DKC_SINGLELIST *ptr) |
DKC_EXTERN DKC_SINGLELIST *WINAPI | dkcAllocSingleListDeserialize (DKC_DESERIALIZE *se) |
DKC_SERIALIZEから新しいSingleListを作る。. | |
DKC_EXTERN void WINAPI | dkcSingleListSerialize (const DKC_SINGLELIST *ptr, DKC_SERIALIZE *se) |
DKC_SERIALIZEにシリアライズデータをぶち込む. | |
DKC_EXTERN DKC_SINGLELIST_OBJECT *WINAPI | dkcAllocSingleListObject (const void *data, size_t size) |
DKC_EXTERN int WINAPI | dkcFreeSingleListObject (DKC_SINGLELIST_OBJECT **) |
DKC_EXTERN DKC_SINGLELIST_OBJECT *WINAPI | dkcAllocSingleListObjectDeserialize (DKC_DESERIALIZE *se) |
DKC_EXTERN void WINAPI | dkcSingleListObjectSerialize (const DKC_SINGLELIST_OBJECT *ptr, DKC_SERIALIZE *se) |
dkcSingleList.h で定義されています。
|
dkcSingleList.h の 89 行で定義されています。 |
|
dkcSingleListSetBuffer()のWrapper dkcSingleList.h の 82 行で定義されています。 |
|
|
stlもどき(の、つもり・・・) 参照元 dkcAllocSingleListObject(), dkcAllocSingleListObjectDeserialize(), dkcFreeSingleListObject(), と dkcSingleListObjectSerialize(). |
|
シングルリスト領域を得る。
dkcSingleList.c の 56 行で定義されています。 参照先 DKC_SINGLELIST, dkcAllocate(), dkcFree(), dkcNewSingleList(), DKUTIL_FAILED, と NULL. 参照元 dkcAllocSingleListDeserialize(), dkcAllocSingleListObject(), と dkcSingleListInsert().
00056 { 00057 DKC_SINGLELIST *p = NULL; 00058 p = dkcAllocate(sizeof(DKC_SINGLELIST)); 00059 //p dkcAllocate(size); 00060 if(DKUTIL_FAILED(dkcNewSingleList(p,data,size))){ 00061 goto Error; 00062 } 00063 return p; 00064 Error: 00065 dkcFree(&p); 00066 return NULL; 00067 } |
|
dkcSingleList.c の 130 行で定義されています。 参照先 DKC_BUFFER, DKC_SINGLELIST, dkcAllocBuffer(), dkc_SingleList::mBuff, dkc_SingleList::mSize, と NULL.
00131 { 00132 DKC_BUFFER *p; 00133 if(NULL==ptr) return NULL; 00134 p = dkcAllocBuffer(ptr->mBuff,ptr->mSize); 00135 return p; 00136 } |
|
DKC_SERIALIZEから新しいSingleListを作る。.
dkcSingleList.c の 140 行で定義されています。 参照先 DKC_DESERIALIZE, DKC_SINGLELIST, dkcAllocSingleList(), dkcDeserializeRead(), dkcmNOT_ASSERT, dkcSingleListChain(), DKUTIL_MEMZERO, edkcSerializeIDSingleList, dkc_SingleList::mBuff, dkc_SingleList::mSize, と NULL. 参照元 dkcAllocSingleListObjectDeserialize().
00141 { 00142 DKC_SINGLELIST *p,*tp,*beginp; 00143 DKC_SINGLELIST t; 00144 size_t read,c,i; 00145 UINT sig; 00146 00147 dkcmNOT_ASSERT(NULL==se); 00148 DKUTIL_MEMZERO(&t,sizeof(t)); 00149 //シグネチャを取得 00150 dkcDeserializeRead(se,&sig,sizeof(sig),&read); 00151 //そんな馬鹿な!判定 00152 if(read != sizeof(sig) || edkcSerializeIDSingleList != sig) 00153 { 00154 return NULL; 00155 } 00156 //数を取得 00157 dkcDeserializeRead(se,&c,sizeof(c),&read); 00158 00159 //構造体を取得。 00160 dkcDeserializeRead(se,&t,sizeof(DKC_SINGLELIST),&read); 00161 p = dkcAllocSingleList(NULL,t.mSize); 00162 //バッファ領域を取得。 00163 dkcDeserializeRead(se,p->mBuff,p->mSize,&read); 00164 00165 beginp = p; 00166 for(i=0;i<c;i++) 00167 { 00168 //構造体を取得。 00169 dkcDeserializeRead(se,&t,sizeof(DKC_SINGLELIST),&read); 00170 //保存。 00171 tp = p; 00172 //リスト生成 00173 p = dkcAllocSingleList(NULL,t.mSize); 00174 //バッファ領域を取得。 00175 dkcDeserializeRead(se,p->mBuff,p->mSize,&read); 00176 //チェイン 00177 dkcSingleListChain(tp,p); 00178 00179 } 00180 return beginp; 00181 } |
|
|
dkcSingleList.c の 357 行で定義されています。 参照先 DKC_DESERIALIZE, DKC_SINGLELIST, DKC_SINGLELIST_OBJECT, dkcAllocSingleListDeserialize(), dkcAllocSingleListObject(), dkcDeserializeRead(), dkcFreeSingleList(), dkcmNOT_ASSERT, dkcSingleListTail(), edkcSerializeIDSingleListObject, と NULL.
00358 { 00359 int sig; 00360 size_t read; 00361 DKC_SINGLELIST_OBJECT t,*plistobj; 00362 DKC_SINGLELIST *li; 00363 00364 //シグネチャを取得 00365 dkcDeserializeRead(se,&sig,sizeof(sig),&read); 00366 //そんな馬鹿な!判定 00367 if(read != sizeof(sig) || edkcSerializeIDSingleListObject != sig) 00368 { 00369 return NULL; 00370 } 00371 //objectを取得 00372 dkcDeserializeRead(se,&t,sizeof(t),&read); 00373 00374 if(read != sizeof(t)){//なぜ、もう読み込めないのだ! 00375 return NULL; 00376 } 00377 //single listを復元ナリ 00378 li = dkcAllocSingleListDeserialize(se); 00379 if(li == NULL) return NULL; 00380 00381 //objectをAlloc 00382 plistobj = dkcAllocSingleListObject(NULL,0); 00383 # ifdef DEBUG 00384 dkcmNOT_ASSERT(NULL== plistobj); 00385 # endif 00386 if(NULL == plistobj) goto Error; 00387 00388 //内部のリストは解放しておく^^;結構強引な処理 00389 dkcFreeSingleList(&plistobj->mBegin); 00390 00391 plistobj->mBegin = li; 00392 plistobj->mTail = dkcSingleListTail(li); 00393 00394 //多分、これでOK!? 00395 return plistobj; 00396 Error: 00397 dkcFreeSingleList(&li); 00398 return NULL; 00399 } |
|
dkcAllocNewSingleList()で確保したリスト領域と内部バッファを削除。dkcAllocNewSingleListと対。 DKC_SINGLELISTをデリート (リンクしてあるリストも削除します。 一つだけの要素を削除したい場合はdkcEraseSingleListを使ってください。)
dkcSingleList.c の 70 行で定義されています。 参照先 DKC_SINGLELIST, dkcDeleteSingleList(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, と NULL. 参照元 dkcAllocSingleListObject(), dkcAllocSingleListObjectDeserialize(), と dkcFreeSingleListObject().
00070 { 00071 if(NULL==ptr) return edk_FAILED; 00072 if(DKUTIL_FAILED(dkcDeleteSingleList(*ptr))){ 00073 return edk_FAILED; 00074 } 00075 //dkcFree(*ptr); 00076 return edk_SUCCEEDED; 00077 } |
|
dkcSingleList.c の 350 行で定義されています。 参照先 DKC_SINGLELIST_OBJECT, dkcFree(), dkcFreeSingleList(), edk_ArgumentException, と NULL.
00351 { 00352 if(NULL==p || NULL==*p) return edk_ArgumentException; 00353 dkcFreeSingleList(&(*p)->mBegin); 00354 return dkcFree(p); 00355 } |
|
dkcSingleList.c の 79 行で定義されています。 参照先 DKC_SINGLELIST, dkcmNOT_ASSERT, dkc_SingleList::mNext, と NULL. 参照元 dkcAllocSingleListDeserialize(), と dkcSingleListInsert().
00080 { 00081 DKC_SINGLELIST *t=NULL; 00082 00083 //バカヤロー条件 00084 dkcmNOT_ASSERT(NULL==ptr || NULL==nextp); 00085 00086 if(ptr->mNext) 00087 {//次へのポインタがあった場合 00088 t = ptr->mNext;//保存。 00089 ptr->mNext = nextp;//ぶち込む。 00090 nextp->mNext = t;//保存していたのをぶち込む 00091 00092 }else 00093 {//次へのポインタがなかった場合。 00094 ptr->mNext = nextp;//すぐぶち込む。 00095 } 00096 00097 00098 } |
|
dkcSingleList.c の 112 行で定義されています。 参照先 DKC_SINGLELIST, dkcFree(), dkc_SingleList::mBuff, dkc_SingleList::mNext, と NULL. 参照元 dkcDeleteSingleList(), と dkcSLOEraseLogic().
|
|
リスト構造体内に保存しているデータをもらう dkcSingleList.c の 217 行で定義されています。 参照先 dkc_memcpy(), DKC_SINGLELIST, edk_FAILED, dkc_SingleList::mBuff, dkc_SingleList::mSize, と NULL. 参照元 dkcAllocSingleListObject().
00218 { 00219 if(NULL==ptr || NULL==data || 0==size){ 00220 return edk_FAILED; 00221 } 00222 return dkc_memcpy(data,size,ptr->mBuff,ptr->mSize); 00223 } |
|
dkcSingleList.c の 99 行で定義されています。 参照先 DKC_SINGLELIST, dkcAllocSingleList(), dkcmNOT_ASSERT, dkcSingleListChain(), edk_ArgumentException, edk_FAILED, edk_SUCCEEDED, dkc_SingleList::mNext, と NULL.
00099 { 00100 DKC_SINGLELIST *p; 00101 if(NULL==ptr) return edk_ArgumentException; 00102 00103 p = dkcAllocSingleList(data,size); 00104 if(NULL==p) return edk_FAILED; 00105 dkcmNOT_ASSERT(p->mNext);//念のため。 00106 00107 dkcSingleListChain(ptr,p); 00108 00109 return edk_SUCCEEDED; 00110 } |
|
dkcSingleList.c の 403 行で定義されています。 参照先 DKC_SERIALIZE, DKC_SINGLELIST_OBJECT, dkcSerializeWrite(), dkcSingleListSerialize(), edkcSerializeIDSingleListObject, と dkc_SingleListObject::mBegin.
00404 { 00405 int sig; 00406 00407 sig = edkcSerializeIDSingleListObject; 00408 //シグネチャ保存 00409 dkcSerializeWrite(se,&sig,sizeof(sig)); 00410 //objectを保存 00411 dkcSerializeWrite(se,ptr,sizeof(DKC_SINGLELIST_OBJECT)); 00412 00413 //シングルリストをシリアライズ 00414 dkcSingleListSerialize(ptr->mBegin,se); 00415 } |
|
DKC_SERIALIZEにシリアライズデータをぶち込む.
dkcSingleList.c の 184 行で定義されています。 参照先 DKC_SERIALIZE, DKC_SINGLELIST, dkcmNOT_ASSERT, dkcSerializeWrite(), edkcSerializeIDSingleList, dkc_SingleList::mBuff, dkc_SingleList::mNext, dkc_SingleList::mSize, と NULL. 参照元 dkcSingleListObjectSerialize().
00185 { 00186 DKC_SINGLELIST *tp = (DKC_SINGLELIST *)ptr; 00187 size_t c; //counter 00188 UINT sig;//signature 00189 //size_t i; //for counter 00190 dkcmNOT_ASSERT(NULL==ptr); 00191 00192 sig = edkcSerializeIDSingleList; 00193 //シグネチャを保存 00194 dkcSerializeWrite(se,&sig,sizeof(sig)); 00195 00196 for(c=0;;c++)//c=0はSerialize,Deserialize統一しないと行けない。 00197 {//liner count... very slow... 00198 if(NULL == tp->mNext) break; 00199 tp = tp->mNext; 00200 } 00201 //数を入れる。 00202 dkcSerializeWrite(se,&c,sizeof(c)); 00203 00204 tp = (DKC_SINGLELIST *)ptr; 00205 for(;;){ 00206 //構造体を入れる。 00207 dkcSerializeWrite(se,tp,sizeof(DKC_SINGLELIST)); 00208 //バッファ領域を入れる。 00209 dkcSerializeWrite(se,tp->mBuff,tp->mSize); 00210 if(NULL == tp->mNext){ 00211 break; 00212 } 00213 tp = tp->mNext;//次へのポインタ 00214 } 00215 00216 } |
|
シングルリストの一つの要素が持っているバッファにデータを書き込む(上書きする) 足りないバッファサイズはリサイズされる。 dkcSingleList.c の 225 行で定義されています。 参照先 dkc_memcpy(), DKC_SINGLELIST, dkcReallocate(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, dkc_SingleList::mBuff, dkc_SingleList::mSize, と NULL. 参照元 dkcAllocSingleListObject().
00226 { 00227 void *NewPtr; 00228 00229 if(NULL==ptr || NULL==data || 0==size){ 00230 return edk_FAILED; 00231 } 00232 00233 if(ptr->mSize < size){ 00234 if(DKUTIL_FAILED(dkcReallocate(&NewPtr,size,&(ptr->mBuff)))){ 00235 return edk_FAILED; 00236 } 00237 00238 ptr->mBuff = NewPtr; 00239 ptr->mSize = size; 00240 } 00241 00242 if(DKUTIL_FAILED(dkc_memcpy(ptr->mBuff,ptr->mSize,data,size))){ 00243 return edk_FAILED; 00244 } 00245 00246 return edk_SUCCEEDED; 00247 } |
|
dkcSingleList.c の 248 行で定義されています。 参照先 DKC_SINGLELIST, dkc_SingleList::mNext, と NULL.
00249 { 00250 DKC_SINGLELIST *it = top; 00251 size_t count = 0; 00252 for(;it != NULL;) 00253 { 00254 count++; 00255 it = it->mNext; 00256 } 00257 return count; 00258 } |