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

dkcArrayOneByOne.h

配列プールにO(1)でデータを入れて、参照IDを返すコンテナです。
から:
2004/08/22
[詳細]

#include "dkcOSIndependent.h"
#include "dkcBuffer.h"
#include "dkcStack.h"

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

Include dependency graph

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

Included by dependency graph

ソースコードを見る。

構成

struct  dkc_ArrayOneByOne

型定義

typedef dkc_ArrayOneByOne DKC_ARRAY_ONEBYONE

列挙型

enum  { edkcArrayOneByOneStatic = 0, edkcArrayOneByOneDynamic }

関数

DKC_EXTERN DKC_ARRAY_ONEBYONE
*WINAPI 
dkcAllocArrayOneByOneStatic (size_t offset, size_t num)
DKC_EXTERN DKC_ARRAY_ONEBYONE
*WINAPI 
dkcAllocArrayOneByOneDynamic (size_t offset, size_t num, size_t ext_num)
 dkcAllocArrayOneByOneStatic() バッファが足りない場合、バッファを動的拡張するモードです。

DKC_EXTERN int WINAPI dkcFreeArrayOneByOne (DKC_ARRAY_ONEBYONE **pp)
 dkcAllocArrayOneByOne 系で取得したメモリ領域を開放します。

DKC_EXTERN int WINAPI dkcArrayOneByOnePushSafe (DKC_ARRAY_ONEBYONE *, const void *data, size_t size)
 dkcArrayOneByOnePush()の安全版

DKC_EXTERN int WINAPI dkcArrayOneByOnePush (DKC_ARRAY_ONEBYONE *, const void *data)
 要素を挿入する

DKC_EXTERN int WINAPI dkcArrayOneByOnePop (DKC_ARRAY_ONEBYONE *, int id)
 要素を削除する

DKC_EXTERN int WINAPI dkcArrayOneByOneReference (DKC_ARRAY_ONEBYONE *, int id, void *ref)
DKC_EXTERN size_t WINAPI dkcArrayOneByOneSize (DKC_ARRAY_ONEBYONE *)
 現在の使用している要素数を返す。

DKC_EXTERN size_t WINAPI dkcArrayOneByOneCapacity (DKC_ARRAY_ONEBYONE *)
 このコンテナの許容量(要素数)を返す。

DKC_EXTERN size_t WINAPI dkcArrayOneByOneRestSize (DKC_ARRAY_ONEBYONE *p)
 このコンテナの残り領域(要素数)を返す

DKC_EXTERN size_t WINAPI dkcArrayOneByOneOffset (DKC_ARRAY_ONEBYONE *)
 一つの要素のサイズ(オフセット)を返す


説明

配列プールにO(1)でデータを入れて、参照IDを返すコンテナです。
から:
2004/08/22

作者:
d金魚

覚え書き:
アルゴリズム概要

仕様 INT_MAX個の要素までしか挿入できない。

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


型定義

typedef struct dkc_ArrayOneByOne DKC_ARRAY_ONEBYONE
 

配列の中から空き領域を得るための機構が使う構造体

参照元 BufferResize(), dkcAllocArrayOneByOne(), dkcAllocArrayOneByOneDynamic(), dkcAllocArrayOneByOneStatic(), dkcArrayOneByOneCapacity(), dkcArrayOneByOneOffset(), dkcArrayOneByOnePop(), dkcArrayOneByOnePush(), dkcArrayOneByOnePushSafe(), dkcArrayOneByOneReference(), dkcArrayOneByOneRestSize(), dkcArrayOneByOneSize(), dkcFreeArrayOneByOne(), と setData().


列挙型

anonymous enum
 

列挙型の値:
edkcArrayOneByOneStatic  バッファの拡張は出来ないタイプ
edkcArrayOneByOneDynamic  バッファの格調が出来るタイプ

dkcArrayOneByOne.h46 行で定義されています。

00046     {
00048     edkcArrayOneByOneStatic = 0,
00050     edkcArrayOneByOneDynamic,
00051 };


関数

DKC_EXTERN DKC_ARRAY_ONEBYONE* WINAPI dkcAllocArrayOneByOneDynamic size_t  offset,
size_t  num,
size_t  ext_num
 

dkcAllocArrayOneByOneStatic() バッファが足りない場合、バッファを動的拡張するモードです。

dkcArrayOneByOne.c61 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcAllocArrayOneByOne(), と edkcArrayOneByOneDynamic.

00061                                                                                                  {
00062     return dkcAllocArrayOneByOne(   edkcArrayOneByOneDynamic, offset,num,ext_num);
00063 }

DKC_EXTERN DKC_ARRAY_ONEBYONE* WINAPI dkcAllocArrayOneByOneStatic size_t  offset,
size_t  num
 

引数:
offset[in] データのオフセット
num[in] 初期バッファの数 (確保されるメモリ領域はoffset * num)
覚え書き:
内部でバッファを動的拡張しないモードで初期化します。

dkcArrayOneByOne.c57 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcAllocArrayOneByOne(), と edkcArrayOneByOneStatic.

00057                                                                                  {
00058     return dkcAllocArrayOneByOne(   edkcArrayOneByOneStatic, offset , num , 0 );
00059 }

DKC_EXTERN size_t WINAPI dkcArrayOneByOneCapacity DKC_ARRAY_ONEBYONE  ) 
 

このコンテナの許容量(要素数)を返す。

dkcArrayOneByOne.c197 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, と dkc_ArrayOneByOne::mNum.

00197                                                              {
00198     return p->mNum;
00199 }

DKC_EXTERN size_t WINAPI dkcArrayOneByOneOffset DKC_ARRAY_ONEBYONE  ) 
 

一つの要素のサイズ(オフセット)を返す

dkcArrayOneByOne.c207 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, と dkc_ArrayOneByOne::mOffset.

00207                                                            {
00208     return p->mOffset;
00209 }

DKC_EXTERN int WINAPI dkcArrayOneByOnePop DKC_ARRAY_ONEBYONE p,
int  id
 

要素を削除する

戻り値:
enum edk_Resultのどれかを返す。

dkcArrayOneByOne.c173 行で定義されています。

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

DKC_EXTERN int WINAPI dkcArrayOneByOnePush DKC_ARRAY_ONEBYONE ,
const void *  data
 

要素を挿入する

戻り値:
参照IDを返す。失敗した場合は -1

dkcArrayOneByOne.c164 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcArrayOneByOnePushSafe(), と dkc_ArrayOneByOne::mOffset.

00164                                                                                   {
00165 
00166     return dkcArrayOneByOnePushSafe(p,data,p->mOffset);
00167 }

DKC_EXTERN int WINAPI dkcArrayOneByOnePushSafe DKC_ARRAY_ONEBYONE ,
const void *  data,
size_t  size
 

dkcArrayOneByOnePush()の安全版

dkcArrayOneByOne.c129 行で定義されています。

参照先 BufferResize(), DKC_ARRAY_ONEBYONE, dkcStackIsEmpty(), edkcArrayOneByOneDynamic, edkcArrayOneByOneStatic, dkc_ArrayOneByOne::mFlag, dkc_ArrayOneByOne::mOffset, dkc_ArrayOneByOne::mStack, と setData().

参照元 dkcArrayOneByOnePush().

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 }

DKC_EXTERN int WINAPI dkcArrayOneByOneReference DKC_ARRAY_ONEBYONE ,
int  id,
void *  ref
 

引数:
id[in] Pushで得た参照IDを指定する
ref[out] 関数が成功した場合、idへのポインタが返る。
戻り値:
enum edk_Resultのどれかを返す。

dkcArrayOneByOne.c188 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcBufferGetOffset(), dkc_ArrayOneByOne::mBuff, と dkc_ArrayOneByOne::mOffset.

00188                                                                            {
00189     return dkcBufferGetOffset(p->mBuff,pp,p->mOffset,p->mOffset * id);
00190 }

DKC_EXTERN size_t WINAPI dkcArrayOneByOneRestSize DKC_ARRAY_ONEBYONE p  ) 
 

このコンテナの残り領域(要素数)を返す

dkcArrayOneByOne.c202 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcStackRestSize(), と dkc_ArrayOneByOne::mStack.

00203 {
00204     return dkcStackRestSize(p->mStack);
00205 }

DKC_EXTERN size_t WINAPI dkcArrayOneByOneSize DKC_ARRAY_ONEBYONE  ) 
 

現在の使用している要素数を返す。

dkcArrayOneByOne.c193 行で定義されています。

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

DKC_EXTERN int WINAPI dkcFreeArrayOneByOne DKC_ARRAY_ONEBYONE **  pp  ) 
 

dkcAllocArrayOneByOne 系で取得したメモリ領域を開放します。

dkcArrayOneByOne.c65 行で定義されています。

参照先 DKC_ARRAY_ONEBYONE, dkcFree(), dkcFreeBuffer(), dkcFreeStack(), と 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 }


dkutil_cに対してTue Feb 22 02:01:58 2005に生成されました。 doxygen 1.3.6