#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) |
| DKC_EXTERN int WINAPI | dkcGetSingleListBuffer (DKC_SINGLELIST *ptr, void *data, size_t size) |
dkcSingleList.h で定義されています。
|
|
dkcSingleList.h の 89 行で定義されています。 |
|
|
dkcSingleListSetBuffer()のWrapper dkcSingleList.h の 82 行で定義されています。 |
|
|
|
stlもどき(の、つもり・・・) 参照元 dkcAllocSingleListObject(), dkcAllocSingleListObjectDeserialize(), dkcFreeSingleListObject(), と dkcSingleListObjectSerialize(). |
|
||||||||||||
|
シングルリスト領域を得る。
dkcSingleList.c の 56 行で定義されています。 参照先 DKC_SINGLELIST, dkcAllocate(), dkcFree(), dkcNewSingleList(), と NULL. 参照元 dkcAllocSingleListDeserialize(), dkcAllocSingleListObject(), と dkcSingleListInsert().
00056 {
00057 DKC_SINGLELIST *p = NULL;
00058 p = (DKC_SINGLELIST *)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((void **)&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(), 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(), と 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((void **)*ptr);
00076 return edk_SUCCEEDED;
00077 }
|
|
|
dkcSingleList.c の 350 行で定義されています。 参照先 DKC_SINGLELIST_OBJECT, dkcFree(), dkcFreeSingleList(), と NULL.
00351 {
00352 if(NULL==p || NULL==*p) return edk_ArgumentException;
00353 dkcFreeSingleList(&(*p)->mBegin);
00354 return dkcFree((void **)p);
00355 }
|
|
||||||||||||||||
|
dkcSingleList.c の 123 行で定義されています。 参照先 dkc_memcpy(), DKC_SINGLELIST, dkc_SingleList::mBuff, dkc_SingleList::mSize, と NULL.
|
|
||||||||||||
|
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, 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(), 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 行で定義されています。 参照先 BYTE, dkc_memcpy(), DKC_SINGLELIST, dkcReallocate(), 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,(void **)&(ptr->mBuff)))){
00235 return edk_FAILED;
00236 }
00237
00238 ptr->mBuff =(BYTE *) 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 }
|
1.3.6