#include "dkcArrayOneByOne.h"
#include "dkcStdio.h"
dkcArrayOneByOne.cのインクルード依存関係図

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

マクロ定義 | |
| #define | DKUTIL_C_ARRAY_ONEBYONE_C |
関数 | |
| DKC_ARRAY_ONEBYONE *WINAPI | dkcAllocArrayOneByOne (BYTE flag, size_t offset, size_t num, size_t ext_size) |
| DKC_ARRAY_ONEBYONE *WINAPI | dkcAllocArrayOneByOneStatic (size_t offset, size_t num) |
| DKC_ARRAY_ONEBYONE *WINAPI | dkcAllocArrayOneByOneDynamic (size_t offset, size_t num, size_t ext_num) |
| dkcAllocArrayOneByOneStatic() バッファが足りない場合、バッファを動的拡張するモードです。 | |
| int WINAPI | dkcFreeArrayOneByOne (DKC_ARRAY_ONEBYONE **p) |
| dkcAllocArrayOneByOne 系で取得したメモリ領域を開放します。 | |
| int | BufferResize (DKC_ARRAY_ONEBYONE *p) |
| バッファをリサイズ。INT_MAX個以上の要素は挿入できないようになっている。 | |
| size_t | setData (DKC_ARRAY_ONEBYONE *p, const void *data, size_t size) |
| int WINAPI | dkcArrayOneByOnePushSafe (DKC_ARRAY_ONEBYONE *p, const void *data, size_t size) |
| dkcArrayOneByOnePush()の安全版 | |
| DKC_INLINE int WINAPI | dkcArrayOneByOnePush (DKC_ARRAY_ONEBYONE *p, const void *data) |
| 要素を挿入する | |
| int WINAPI | dkcArrayOneByOnePop (DKC_ARRAY_ONEBYONE *p, int id) |
| 要素を削除する | |
| int WINAPI | dkcArrayOneByOneReference (DKC_ARRAY_ONEBYONE *p, int id, void *pp) |
| size_t WINAPI | dkcArrayOneByOneSize (DKC_ARRAY_ONEBYONE *p) |
| 現在の使用している要素数を返す。 | |
| size_t WINAPI | dkcArrayOneByOneCapacity (DKC_ARRAY_ONEBYONE *p) |
| このコンテナの許容量(要素数)を返す。 | |
| size_t WINAPI | dkcArrayOneByOneRestSize (DKC_ARRAY_ONEBYONE *p) |
| このコンテナの残り領域(要素数)を返す | |
| size_t WINAPI | dkcArrayOneByOneOffset (DKC_ARRAY_ONEBYONE *p) |
| 一つの要素のサイズ(オフセット)を返す | |
d金魚
dkcArrayOneByOne.c で定義されています。
|
|
dkcArrayOneByOne.c の 9 行で定義されています。 |
|
|
バッファをリサイズ。INT_MAX個以上の要素は挿入できないようになっている。
dkcArrayOneByOne.c の 76 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcBufferResize(), dkcBufferSize(), dkcmFORCE_NOT_ASSERT, dkcStackDynamicPush(), DKUTIL_FAILED, edk_FAILED, edk_SUCCEEDED, dkc_ArrayOneByOne::mBuff, dkc_ArrayOneByOne::mExtNum, dkc_ArrayOneByOne::mNum, dkc_ArrayOneByOne::mOffset, と dkc_ArrayOneByOne::mStack. 参照元 dkcArrayOneByOnePushSafe().
00076 {
00077
00078 size_t tsize;
00079 size_t temp;
00080 int i;
00081 //保存しておく
00082 tsize = dkcBufferSize(p->mBuff);
00083
00084
00085 //length check
00086 if(p->mNum + p->mExtNum > INT_MAX){
00087 return edk_FAILED;
00088 }
00089
00090 //バッファを拡張
00091 temp = (p->mExtNum * p->mOffset) + tsize;
00092
00093 dkcmFORCE_NOT_ASSERT(
00094 DKUTIL_FAILED(dkcBufferResize(p->mBuff,temp))
00095 );
00096
00097
00098
00099
00100 //このループになれていないからバグあるかも?
00101 tsize = p->mExtNum;
00102 for(i = (int)(p->mNum + p->mExtNum - 1); i >= (int)tsize; i--)
00103 {
00104 dkcStackDynamicPush(p->mStack,&i);
00105 }
00106 //全体数を更新
00107 p->mNum += p->mExtNum;
00108
00109 return edk_SUCCEEDED;
00110
00111 }
|
|
||||||||||||||||||||
|
dkcArrayOneByOne.c の 14 行で定義されています。 参照先 BYTE, DKC_ARRAY_ONEBYONE, dkcAllocate(), dkcAllocBuffer(), dkcAllocStack(), dkcFree(), dkcFreeBuffer(), dkcFreeStack(), dkcStackPush(), dkc_ArrayOneByOne::mBuff, dkc_ArrayOneByOne::mExtNum, dkc_ArrayOneByOne::mFlag, dkc_ArrayOneByOne::mNum, dkc_ArrayOneByOne::mOffset, dkc_ArrayOneByOne::mStack, と NULL. 参照元 dkcAllocArrayOneByOneDynamic(), と dkcAllocArrayOneByOneStatic().
00014 {
00015 DKC_ARRAY_ONEBYONE *p;
00016 int i;
00017
00018 p = (DKC_ARRAY_ONEBYONE *)dkcAllocate(sizeof(DKC_ARRAY_ONEBYONE));
00019 if(NULL==p){
00020 return NULL;
00021 }
00022
00023 //offset * num個のバッファを確保
00024 p->mBuff = dkcAllocBuffer(NULL,offset * num);
00025 if(NULL==p->mBuff){
00026 goto Error;
00027 }
00028
00029 //num個のint用スタックを確保
00030 p->mStack = dkcAllocStack(num,sizeof(int));
00031 if(NULL==p->mStack){
00032 goto Error;
00033 }
00034
00035 //スタックを初期化 (最初の配列の方をスタックの最初の方にしたいので^^;
00036 for(i = num - 1; i>=0 ;i--){
00037 dkcStackPush(p->mStack,(const void *)&i);
00038 }
00039
00040 p->mOffset = offset;
00041 p->mNum = num;
00042 p->mFlag = flag;
00043 p->mExtNum = ext_size;
00044
00045 return p;
00046
00047
00048
00049 Error:
00050 dkcFreeStack(&(p->mStack));
00051 dkcFreeBuffer(&(p->mBuff));
00052 dkcFree((void **)&p);
00053 return NULL;
00054 }
|
|
||||||||||||||||
|
dkcAllocArrayOneByOneStatic() バッファが足りない場合、バッファを動的拡張するモードです。
dkcArrayOneByOne.c の 61 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcAllocArrayOneByOne(), と edkcArrayOneByOneDynamic.
00061 {
00062 return dkcAllocArrayOneByOne( edkcArrayOneByOneDynamic, offset,num,ext_num);
00063 }
|
|
||||||||||||
|
dkcArrayOneByOne.c の 57 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcAllocArrayOneByOne(), と edkcArrayOneByOneStatic.
00057 {
00058 return dkcAllocArrayOneByOne( edkcArrayOneByOneStatic, offset , num , 0 );
00059 }
|
|
|
このコンテナの許容量(要素数)を返す。
dkcArrayOneByOne.c の 197 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, と dkc_ArrayOneByOne::mNum.
00197 {
00198 return p->mNum;
00199 }
|
|
|
一つの要素のサイズ(オフセット)を返す
dkcArrayOneByOne.c の 207 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, と dkc_ArrayOneByOne::mOffset.
00207 {
00208 return p->mOffset;
00209 } |
|
||||||||||||
|
要素を削除する
dkcArrayOneByOne.c の 173 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcmFORCE_NOT_ASSERT, dkcStackDynamicPush(), dkc_Stack::mBuffer, dkc_Stack::mCount, と dkc_ArrayOneByOne::mStack.
00173 {
00174
00175 #ifdef DEBUG
00176 int i;
00177 //重複チェックをしてみる。
00178 int *ch = (int *)p->mStack->mBuffer;
00179 size_t se = p->mStack->mCount;
00180 for(i=0;i<(int)se;i++){
00181 dkcmFORCE_NOT_ASSERT(ch[i] == id);
00182 }
00183 #endif
00184 return dkcStackDynamicPush(p->mStack,&id);
00185 }
|
|
||||||||||||
|
要素を挿入する
dkcArrayOneByOne.c の 164 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, DKC_INLINE, dkcArrayOneByOnePushSafe(), と dkc_ArrayOneByOne::mOffset.
00164 {
00165
00166 return dkcArrayOneByOnePushSafe(p,data,p->mOffset);
00167 }
|
|
||||||||||||||||
|
dkcArrayOneByOne.c の 129 行で定義されています。 参照先 BufferResize(), DKC_ARRAY_ONEBYONE, dkcStackIsEmpty(), DKUTIL_FAILED, edkcArrayOneByOneDynamic, edkcArrayOneByOneStatic, dkc_ArrayOneByOne::mFlag, dkc_ArrayOneByOne::mOffset, dkc_ArrayOneByOne::mStack, と setData().
00129 {
00130 size_t r;
00131
00132 if(size > p->mOffset){
00133 return -1;
00134 }
00135
00136
00137
00138 switch(p->mFlag)
00139 {
00140 case edkcArrayOneByOneStatic:
00141 if(dkcStackIsEmpty(p->mStack)){
00142 return -1;
00143 }
00144
00145 break;
00146 case edkcArrayOneByOneDynamic:
00147 if(dkcStackIsEmpty(p->mStack))
00148 {//バッファ拡張処理
00149 if(DKUTIL_FAILED(BufferResize(p))){
00150 return -1;
00151 }
00152 }
00153
00154 break;
00155 }//end of switch
00156
00157 r = setData(p,data,size);
00158
00159 return r;
00160
00161 }
|
|
||||||||||||||||
|
dkcArrayOneByOne.c の 188 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcBufferGetOffset(), dkc_ArrayOneByOne::mBuff, と dkc_ArrayOneByOne::mOffset.
00188 {
00189 return dkcBufferGetOffset(p->mBuff,pp,p->mOffset,p->mOffset * id);
00190 }
|
|
|
このコンテナの残り領域(要素数)を返す
dkcArrayOneByOne.c の 202 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcStackRestSize(), と dkc_ArrayOneByOne::mStack.
00203 {
00204 return dkcStackRestSize(p->mStack);
00205 }
|
|
|
現在の使用している要素数を返す。
dkcArrayOneByOne.c の 193 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcmNOT_ASSERT, dkcStackSize(), dkc_ArrayOneByOne::mNum, と dkc_ArrayOneByOne::mStack.
00193 {
00194 dkcmNOT_ASSERT(p->mNum < dkcStackSize(p->mStack));
00195 return p->mNum - dkcStackSize(p->mStack);
00196 }
|
|
|
dkcAllocArrayOneByOne 系で取得したメモリ領域を開放します。
dkcArrayOneByOne.c の 65 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcFree(), dkcFreeBuffer(), dkcFreeStack(), edk_FAILED, と NULL.
00065 {
00066 if(NULL==p || NULL==*p){
00067 return edk_FAILED;
00068 }
00069 dkcFreeStack(& ( (*p)->mStack ) );
00070 dkcFreeBuffer(& ( (*p)->mBuff ) );
00071 return dkcFree((void **)p);
00072 }
|
|
||||||||||||||||
|
dkcArrayOneByOne.c の 113 行で定義されています。 参照先 DKC_ARRAY_ONEBYONE, dkcBufferSetOffset(), dkcmFORCE_NOT_ASSERT, dkcStackPop(), dkcStackTop(), DKUTIL_FAILED, dkc_ArrayOneByOne::mBuff, dkc_ArrayOneByOne::mOffset, と dkc_ArrayOneByOne::mStack. 参照元 dkcArrayOneByOnePushSafe().
00113 {
00114 int id;
00115
00116 dkcStackTop(p->mStack,&id);
00117
00118 dkcmFORCE_NOT_ASSERT(
00119 DKUTIL_FAILED(
00120 dkcBufferSetOffset(p->mBuff,data,size,p->mOffset * id)
00121 )
00122 );
00123
00124 dkcStackPop(p->mStack);
00125 return id;
00126 }
|
1.3.6