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

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.c12 行で定義されています。

参照先 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.c32 行で定義されています。

参照先 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.c146 行で定義されています。

参照先 dkc_Stack::mOffsetOf, と dkc_Stack::mSize.

参照元 dkcStackRestSize().

00146                                                          {
00147     return (ptr->mSize / ptr->mOffsetOf);
00148 }

DKC_EXTERN void WINAPI dkcStackClear DKC_STACK ptr  ) 
 

Stack内のカウンタを0に戻して、スタックを事実上クリアする。

dkcStack.c133 行で定義されています。

参照先 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.c99 行で定義されています。

参照先 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.c142 行で定義されています。

参照先 dkcStackSize().

参照元 dkcArrayOneByOnePushSafe().

00142                                            {
00143     return (dkcStackSize(ptr)==0);
00144 }

DKC_EXTERN void* WINAPI dkcStackPointer DKC_STACK ptr  ) 
 

スタックのポインタを得る。

dkcStack.c191 行で定義されています。

参照先 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.c40 行で定義されています。

参照先 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.c78 行で定義されています。

参照先 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.c150 行で定義されています。

参照先 dkcStackCapacity(), と dkcStackSize().

参照元 dkcArrayOneByOneRestSize().

00150                                                          {
00151     return dkcStackCapacity(ptr) - dkcStackSize(ptr);
00152 }

DKC_EXTERN size_t WINAPI dkcStackSize DKC_STACK ptr  ) 
 

スタックに入っている要素数を返す

dkcStack.c138 行で定義されています。

参照先 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.c53 行で定義されています。

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


dkutil_cに対してSat Sep 10 09:25:13 2005に生成されました。  doxygen 1.4.4