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

# dkcStack.h

`#include "dkcOSIndependent.h"`

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

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

ソースコードを見る。

## 構成
struct | dkc_Stack
## 型定義
typedef dkc_Stack | DKC_STACK
## 関数
DKC_EXTERN DKC_STACK *WINAPI | dkcAllocStack (size_t numoff__, size_t offsetof__)
DKC_EXTERN int WINAPI | dkcFreeStack (DKC_STACK **ptr)
DKC_EXTERN void WINAPI | dkcStackPop (DKC_STACK *ptr)
| スタックをポップする
DKC_EXTERN int WINAPI | dkcStackTop (DKC_STACK *ptr, void *)
DKC_EXTERN size_t WINAPI | dkcStackSize (DKC_STACK *ptr)
| スタックに入っている要素数を返す
DKC_EXTERN BOOL WINAPI | dkcStackIsEmpty (DKC_STACK *ptr)
DKC_EXTERN int WINAPI | dkcStackPush (DKC_STACK *ptr, const void *)
| スタックにデータを詰めこむ
DKC_EXTERN int WINAPI | dkcStackDynamicPush (DKC_STACK *ptr, const void *)
| スタックにデータを詰めこむ（動的拡張版）
DKC_EXTERN void *WINAPI | dkcStackPointer (DKC_STACK *ptr)
| スタックのポインタを得る。
DKC_EXTERN void WINAPI | dkcStackClear (DKC_STACK *ptr)
DKC_EXTERN size_t WINAPI | dkcStackCapacity (DKC_STACK *ptr)
| 許容量(すでに確保された領域の大きさ)
DKC_EXTERN size_t WINAPI | dkcStackRestSize (DKC_STACK *ptr)
| 残り領域

## 型定義

typedef struct dkc_Stack DKC_STACK

| スタック構造体

## 関数

DKC_EXTERN DKC_STACK* WINAPI dkcAllocStack | ( | size_t | numoff__,
|  | size_t | offsetof__
| ) |

  | 引数:
  | numof__[in] | スタックに使う配列の要素の数
  | offsetof__[in] | スタックにぶち込むデータのサイズ
戻り値: スタックハンドルへのポインタ。 dkcStack.c の 12 行で定義されています。 参照先 BYTE, dkcAllocate(), dkcFree(), dkc_Stack::mBuffer, dkc_Stack::mCount, dkc_Stack::mOffsetOf, dkc_Stack::mSize, と NULL. 参照元 dkcAllocArrayOneByOne(), dkcFree2TreeRoot(), と RegNFA_Construct().
    00012                                                                   {
    00013     DKC_STACK *p;
    00014     size_t size = numof__ * offsetof__;
    00015     if(0==size) return NULL;
    00016     p = (DKC_STACK *)dkcAllocate(sizeof(DKC_STACK));
    00017     if(NULL==p) return NULL;
    00018     p->mBuffer = (BYTE *)dkcAllocate(size);
    00019
    00020     if(NULL==p->mBuffer) goto Error;
    00021
    00022     p->mCount = 0;
    00023     p->mSize = size;
    00024     p->mOffsetOf = offsetof__;
    00025
    00026     return p;
    00027 Error:
    00028     dkcFree((void **)&p);
    00029     return NULL;
    00030 }

DKC_EXTERN int WINAPI dkcFreeStack | ( | DKC_STACK ** | ptr | ) |

| 覚え書き: 必ず使用したあとはこれを呼んでください。 dkcAllocStackと対。 dkcStack.c の 32 行で定義されています。 参照先 dkcFree(), と NULL. 参照元 dkcAllocArrayOneByOne(), dkcFree2TreeRoot(), dkcFreeArrayOneByOne(), RegNFA_Construct(), と RegNFA_Destruct().
    00032                                         {
    00033     if(NULL==ptr || *ptr==NULL || NULL==(*ptr)->mBuffer)
    00034         return edk_ArgumentException;
    00035
    00036     dkcFree((void **)&((*ptr)->mBuffer));
    00037     return dkcFree((void **)ptr);
    00038 }

DKC_EXTERN size_t WINAPI dkcStackCapacity | ( | DKC_STACK * | ptr | ) |

| 許容量(すでに確保された領域の大きさ) dkcStack.c の 146 行で定義されています。 参照先 dkc_Stack::mOffsetOf, と dkc_Stack::mSize. 参照元 dkcStackRestSize().
    00146                                                          {
    00147     return (ptr->mSize / ptr->mOffsetOf);
    00148 }

DKC_EXTERN void WINAPI dkcStackClear | ( | DKC_STACK * | ptr | ) |

| Stack内のカウンタを０に戻して、スタックを事実上クリアする。 dkcStack.c の 133 行で定義されています。 参照先 dkc_Stack::mCount.
    00133                                          {
    00134     //memset(ptr->mBuffer,0,ptr->mSize);
    00135     ptr->mCount = 0;
    00136 }

DKC_EXTERN int WINAPI dkcStackDynamicPush | ( | DKC_STACK * | ptr,
|  | const void * |
| ) |

| スタックにデータを詰めこむ（動的拡張版） dkcStack.c の 99 行で定義されています。 参照先 BYTE, dkcmNOT_ASSERT, dkcReallocate(), dkcReallocateSizeFunction(), dkc_Stack::mBuffer, dkc_Stack::mCount, dkc_Stack::mOffsetOf, dkc_Stack::mSize, と NULL. 参照元 BufferResize(), dkcArrayOneByOnePop(), RegNFA_check_and_push_stack(), RegNFA_gen_state(), と RegNFA_match_a4().
    00100 {
    00101     BYTE *tp;
    00102     size_t point;
    00103
    00104     void *NewPtr;
    00105     size_t want_size;
    00106     dkcmNOT_ASSERT(NULL==ptr);
    00107
    00108     point = ptr->mCount * ptr->mOffsetOf;
    00109
    00110     //もう限界判定
    00111     if(ptr->mSize <= point ){
    00112         //メモリ再確保
    00113         want_size = dkcReallocateSizeFunction(ptr->mSize,ptr->mOffsetOf);
    00114         if(DKUTIL_FAILED(
    00115             dkcReallocate(&NewPtr,want_size,(void **)&ptr->mBuffer)
    00116             )){
    00117             return edk_FAILED;
    00118         }
    00119         ptr->mBuffer = (BYTE *)NewPtr;
    00120         ptr->mSize = want_size;
    00121
    00122     }
    00123     tp = ptr->mBuffer;
    00124
    00125     memcpy(&tp[point],data,ptr->mOffsetOf);
    00126
    00127     ptr->mCount ++;
    00128
    00129     return edk_SUCCEEDED;
    00130
    00131
    00132 }

DKC_EXTERN BOOL WINAPI dkcStackIsEmpty | ( | DKC_STACK * | ptr | ) |

| 戻り値: スタックが空だったらTRUE dkcStack.c の 142 行で定義されています。 参照先 dkcStackSize(). 参照元 dkcArrayOneByOnePushSafe().
    00142                                            {
    00143     return (dkcStackSize(ptr)==0);
    00144 }

DKC_EXTERN void* WINAPI dkcStackPointer | ( | DKC_STACK * | ptr | ) |

| スタックのポインタを得る。 dkcStack.c の 191 行で定義されています。 参照先 dkc_Stack::mBuffer. 参照元 RegNFA_add_e_transition(), RegNFA_add_transition_a5(), RegNFA_check_and_push_stack(), と RegNFA_match_a3().
    00191                                                        {
    00192     return ptr->mBuffer;
    00193 }

DKC_EXTERN void WINAPI dkcStackPop | ( | DKC_STACK * | ptr | ) |

| スタックをポップする dkcStack.c の 40 行で定義されています。 参照先 dkcmNOT_ASSERT, dkc_Stack::mCount, と NULL. 参照元 RegNFA_Destruct(), RegNFA_pop_stack(), と setData().
    00040                                        {
    00041     dkcmNOT_ASSERT(NULL==ptr);
    00042
    00043     //もう無い判定
    00044     if(ptr->mCount <= 0){
    00045         return ;
    00046     }
    00047
    00048     ptr->mCount --;
    00049
    00050     return;
    00051 }

DKC_EXTERN int WINAPI dkcStackPush | ( | DKC_STACK * | ptr,
|  | const void * |
| ) |

| スタックにデータを詰めこむ \ dkcStack.c の 78 行で定義されています。 参照先 BYTE, dkcmNOT_ASSERT, dkc_Stack::mBuffer, dkc_Stack::mCount, dkc_Stack::mOffsetOf, dkc_Stack::mSize, と NULL. 参照元 dkcAllocArrayOneByOne().
    00079 {
    00080     BYTE *tp;
    00081     size_t point;
    00082     dkcmNOT_ASSERT(NULL==ptr);
    00083
    00084     point = ptr->mCount * ptr->mOffsetOf;
    00085     //もう限界判定
    00086     if(ptr->mSize <= point ){
    00087         return edk_FAILED;
    00088     }
    00089     tp = ptr->mBuffer;
    00090
    00091     memcpy(&tp[point],data,ptr->mOffsetOf);
    00092
    00093     ptr->mCount ++;
    00094
    00095     return edk_SUCCEEDED;
    00096
    00097 }

DKC_EXTERN size_t WINAPI dkcStackRestSize | ( | DKC_STACK * | ptr | ) |

| 残り領域 dkcStack.c の 150 行で定義されています。 参照先 dkcStackCapacity(), と dkcStackSize(). 参照元 dkcArrayOneByOneRestSize().
    00150                                                          {
    00151     return dkcStackCapacity(ptr) - dkcStackSize(ptr);
    00152 }

DKC_EXTERN size_t WINAPI dkcStackSize | ( | DKC_STACK * | ptr | ) |

| スタックに入っている要素数を返す dkcStack.c の 138 行で定義されています。 参照先 dkc_Stack::mCount. 参照元 dkcArrayOneByOneSize(), dkcStackIsEmpty(), dkcStackRestSize(), RegNFA_check_and_push_stack(), RegNFA_Destruct(), と RegNFA_gen_state().
    00138                                           {
    00139     return ptr->mCount;
    00140 }

DKC_EXTERN int WINAPI dkcStackTop | ( | DKC_STACK * | ptr,
|  | void * |
| ) |

| dkcStack.c の 53 行で定義されています。 参照先 BYTE, dkcmNOT_ASSERT, dkc_Stack::mBuffer, dkc_Stack::mCount, dkc_Stack::mOffsetOf, と NULL. 参照元 RegNFA_Destruct(), と setData().
    00054 {
    00055
    00056     BYTE *tp;
    00057     size_t point;
    00058     dkcmNOT_ASSERT(NULL==ptr);
    00059
    00060     point = ptr->mOffsetOf * (ptr->mCount-1);//mCountの-1の所のアドレスに存在するデータだから･･･。
    00061
    00062     //もう無い判定
    00063     if(ptr->mCount <= 0){
    00064         return edk_FAILED;
    00065     }
    00066
    00067
    00068     tp = ptr->mBuffer;
    00069
    00070     memcpy(get_data,&tp[point],ptr->mOffsetOf);
    00071
    00072     //ptr->mCount --;
    00073
    00074     return edk_SUCCEEDED;
    00075
    00076 }