#include "dkcOSIndependent.h"
dkcQueue.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
構成 | |
struct | dkc_Queue |
型定義 | |
typedef dkc_Queue | DKC_QUEUE |
関数 | |
DKC_EXTERN DKC_QUEUE *WINAPI | dkcAllocQueue (size_t numof__, size_t offsetof__) |
キュー領域を得る。 | |
DKC_EXTERN int WINAPI | dkcFreeQueue (DKC_QUEUE **ptr) |
dkcAllocNewQueueと対。 | |
DKC_EXTERN int WINAPI | dkcQueuePush (DKC_QUEUE *ptr, const void *) |
DKC_EXTERN int WINAPI | dkcQueueDynamicPush (DKC_QUEUE *ptr, const void *) |
DKC_EXTERN void WINAPI | dkcQueuePop (DKC_QUEUE *ptr) |
DKC_EXTERN int WINAPI | dkcQueueTop (DKC_QUEUE *ptr, void *) |
DKC_EXTERN size_t WINAPI | dkcQueueSize (DKC_QUEUE *ptr) |
DKC_EXTERN BOOL WINAPI | dkcQueueIsEmpty (DKC_QUEUE *ptr) |
DKC_EXTERN void WINAPI | dkcQueueClear (DKC_QUEUE *ptr) |
DKC_EXTERN int WINAPI | dkcQueueGetPoint (const DKC_QUEUE *ptr, size_t point_of__, void *buffer, size_t buffsize) |
dkcQueue.h で定義されています。
|
キュー構造体 |
|
キュー領域を得る。
dkcQueue.c の 12 行で定義されています。 参照先 BYTE, dkcAllocate(), dkcFree(), dkc_Queue::mBuffer, dkc_Queue::mCounter, dkc_Queue::mEntrance, dkc_Queue::mExit, dkc_Queue::mOffsetOf, dkc_Queue::mSize, と NULL. 00012 { 00013 DKC_QUEUE *p; 00014 size_t size = (numof__) * offsetof__; 00015 if(0==size) return NULL; 00016 p = (DKC_QUEUE *)dkcAllocate(sizeof(DKC_QUEUE)); 00017 if(NULL==p) return NULL; 00018 p->mBuffer = (BYTE *)dkcAllocate(size); 00019 00020 if(NULL==p->mBuffer) goto Error; 00021 00022 p->mExit = 0; 00023 p->mEntrance = 0; 00024 p->mSize = size; 00025 p->mOffsetOf = offsetof__; 00026 p->mCounter = 0; 00027 00028 return p; 00029 Error: 00030 dkcFree((void **)&p); 00031 return NULL; 00032 }
|
|
dkcAllocNewQueueと対。 DKC_QUEUEをデリート
dkcQueue.c の 33 行で定義されています。 00033 { 00034 if(NULL==ptr || *ptr==NULL || NULL==(*ptr)->mBuffer) 00035 return edk_ArgumentException; 00036 00037 dkcFree((void **)&((*ptr)->mBuffer)); 00038 return dkcFree((void **)ptr); 00039 }
|
|
キューをクリアする。 dkcQueue.c の 152 行で定義されています。 参照先 dkc_Queue::mCounter, dkc_Queue::mEntrance, dkc_Queue::mExit, と NULL. 00152 { 00153 if(NULL==ptr) return; 00154 00155 ptr->mExit = 0;//出口を戻す。 00156 ptr->mEntrance = 0;//入り口も戻す。 00157 ptr->mCounter = 0;//カウンタも戻す。 00158 }
|
|
dkcQueue.c の 92 行で定義されています。 参照先 BYTE, dkcQueuePush(), dkcReallocate(), dkcReallocateSizeFunction(), dkc_Queue::mBuffer, dkc_Queue::mOffsetOf, と dkc_Queue::mSize. 00093 { 00094 int result; 00095 void *NewPtr; 00096 size_t want_size; 00097 00098 result = dkcQueuePush(ptr,data); 00099 00100 if(DKUTIL_SUCCEEDED(result)) return result; 00101 00102 //メモリ再確保 00103 { 00104 want_size = dkcReallocateSizeFunction(ptr->mSize,ptr->mOffsetOf); 00105 if(DKUTIL_FAILED( 00106 dkcReallocate(&NewPtr,want_size,(void **)&ptr->mBuffer) 00107 )){ 00108 return edk_FAILED; 00109 } 00110 ptr->mBuffer =(BYTE *)NewPtr; 00111 ptr->mSize = want_size; 00112 } 00113 //もう一回行って見る。 00114 return dkcQueuePush(ptr,data); 00115 00116 }
|
|
|
|
dkcQueue.c の 164 行で定義されています。 参照先 dkcQueueSize(). 00164 { 00165 return (dkcQueueSize(ptr)==0); 00166 }
|
|
dkcQueue.c の 117 行で定義されています。 参照先 dkcmNOT_ASSERT, dkc_Queue::mCounter, dkc_Queue::mExit, dkc_Queue::mOffsetOf, dkc_Queue::mSize, と NULL. 00118 { 00119 dkcmNOT_ASSERT(NULL==ptr); 00120 ptr->mExit += ptr->mOffsetOf; 00121 if(ptr->mCounter <= 0) 00122 {//もうありませんよ^^; 00123 return; 00124 } 00125 ptr->mCounter--; 00126 00127 if(ptr->mExit >= ptr->mSize) 00128 {//もう一杯イッパイです。 00129 ptr->mExit = 0; 00130 } 00131 return; 00132 }
|
|
dkcQueue.c の 42 行で定義されています。 参照先 BYTE, dkcmNOT_ASSERT, dkc_Queue::mBuffer, dkc_Queue::mCounter, dkc_Queue::mEntrance, dkc_Queue::mOffsetOf, dkc_Queue::mSize, と NULL. 00042 { 00043 BYTE *tp; 00044 dkcmNOT_ASSERT(NULL==ptr); 00045 00046 tp = ptr->mBuffer; 00047 if(/*ptr->mEntrance <= ptr->mExit &&*/ 00048 ptr->mCounter >= ptr->mSize / ptr->mOffsetOf) 00049 {//MAX... 00050 return edk_FAILED; 00051 } 00052 else if(ptr->mEntrance >= ptr->mSize) 00053 { 00054 ptr->mEntrance = 0; 00055 } 00056 /*if(ptr->mSize < ptr->mOffsetOf + ptr->mEntrance) 00057 {//入り口が満杯 00058 if(ptr->mExit + ptr->mOffsetOf >= ptr->mSize) 00059 { //出口も入り口と一緒・・・。 00060 //と言う事は消せるね。 00061 dkcQueueClear(ptr); 00062 } 00063 else if(ptr->mExit > ptr->mOffsetOf) 00064 {//前まで出口だった使用していない領域が使えるかも? 00065 if(ptr->mEntrance < ptr->mExit) 00066 {//出口の方がオフセットが上だった 00067 //つまり、すでに**----*** こんな感じになっている。 00068 ptr->mEntrance += ptr->mOffsetOf; 00069 }else{//下だった 00070 //こんな感じ:-----** 00071 ptr->mEntrance = 0; 00072 } 00073 }else 00074 {//ダメだ完全満席 00075 return edk_FAILED; 00076 } 00077 }else if(ptr->mEntrance < ptr->mExit && 00078 ptr->mEntrance+ ptr->mOffsetOf > ptr->mExit) 00079 { 00080 return edk_FAILED; 00081 }*/ 00082 00083 memcpy(&tp[ptr->mEntrance],data,ptr->mOffsetOf); 00084 00085 ptr->mEntrance += ptr->mOffsetOf; 00086 ptr->mCounter++; 00087 00088 return edk_SUCCEEDED; 00089 }
|
|
dkcQueue.c の 160 行で定義されています。 参照先 dkc_Queue::mCounter. 参照元 dkcQueueIsEmpty(). 00160 { 00161 return ptr->mCounter; 00162 }
|
|
dkcQueue.c の 133 行で定義されています。 参照先 BYTE, dkcmNOT_ASSERT, dkc_Queue::mBuffer, dkc_Queue::mCounter, dkc_Queue::mExit, dkc_Queue::mOffsetOf, と NULL. 00133 { 00134 BYTE *tp; 00135 00136 dkcmNOT_ASSERT(NULL==ptr || NULL==get_data); 00137 00138 //データが無い。 00139 //if(ptr->mEntrance < ptr->mExit + ptr->mOffsetOf){ 00140 if(0==ptr->mCounter){ 00141 return edk_FAILED; 00142 } 00143 tp = ptr->mBuffer; 00144 00145 memcpy(get_data,&tp[ptr->mExit],ptr->mOffsetOf); 00146 00147 return edk_SUCCEEDED; 00148 00149 00150 }
|