00001
00008 #include "dkcDeque.h"
00009 #include "dkcStdio.h"
00010
00011
00012
00013 DKC_DEQUE* WINAPI dkcAllocDeque(size_t numof__,size_t offsetof__)
00014 {
00015 DKC_DEQUE *p;
00016 size_t size = numof__ * offsetof__;
00017
00018 p = dkcAllocate(sizeof(DKC_DEQUE));
00019 if(NULL==p) return NULL;
00020
00021 p->mBuffer = dkcAllocate(size);
00022 if(NULL==p->mBuffer) goto Error;
00023
00024
00025
00026
00027
00028
00029 p->mSize = size;
00030 p->mOffsetOf = offsetof__;
00031 Error:
00032 dkcFree(&p);
00033 return NULL;
00034 }
00035
00036 int WINAPI dkcFreeDeque(DKC_DEQUE **ptr){
00037 if(NULL==ptr || NULL == (*ptr)) return edk_ArgumentException;
00038 dkcFree(&(*ptr)->mBuffer);
00039 return dkcFree(ptr);
00040 }
00041 #if 0
00042
00043
00044 int WINAPI dkcDequePushBack(DKC_DEQUE *ptr,const void *data)
00045 {
00046 BYTE *tb;
00047 dkcmNOT_ASSERT(NULL==ptr);
00048
00049 if(ptr->mCount >= ptr->mSize / ptr->mOffsetOf){
00050 return edk_FAILED;
00051 }
00052
00053 tb = ptr->mBuffer;
00054
00055 memcpy(&tb[ptr->mEnd],data,ptr->mOffsetOf);
00056
00057
00058 ptr->mEnd += ptr->mOffsetOf;#error ここはmEndのlength checkが必要
00059 ptr->mCount++;
00060
00061
00062 }
00063 #endif
00064
00067 int WINAPI dkcDequePopBack(DKC_DEQUE *ptr,void *);
00068
00069 int WINAPI dkcDequePushFront(DKC_DEQUE *ptr,const void *);
00073 int WINAPI dkcDequePopFront(DKC_DEQUE *ptr,void *);
00077 void WINAPI dkcDequeClear(DKC_DEQUE *ptr);
00078
00079 int WINAPI dkcDequeSerialize(const DKC_DEQUE *ptr,DKC_SERIALIZE *se);
00080
00081 DKC_DEQUE* WINAPI dkcAllocQueueDeserialize(DKC_DESERIALIZE *se);
00082
00089 int WINAPI dkcDequeGetPoint(const DKC_DEQUE *ptr,size_t point_of__,void *buffer,size_t buffsize);
00090
00091
00092