00001 #ifndef DKC_MEMORY_POOL_H 00002 #define DKC_MEMORY_POOL_H 00003 00004 #include "dkcOSIndependent.h" 00005 00006 00007 typedef struct dkc_SameObjectPoolNode{ 00008 struct dkc_SameObjectPoolNode *next; 00009 }DKC_SAME_OBJECT_POOL_NODE; 00010 00011 00012 00013 typedef struct dkc_SameObjectPool{ 00015 size_t max_num; 00017 size_t now_num; 00019 size_t obj_size; 00020 00022 DKC_SAME_OBJECT_POOL_NODE *root; 00023 DKC_SAME_OBJECT_POOL_NODE *tail; 00024 00025 DKC_ALLOC_FUNC_TYPE alloc_f; 00026 DKC_FREE_FUNC_TYPE free_f; 00027 00028 }DKC_SAME_OBJECT_POOL; 00029 00030 00031 00038 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI 00039 dkcAllocSameObjectPool(size_t object_size,size_t max_num, 00040 DKC_ALLOC_FUNC_TYPE alloc_f,DKC_FREE_FUNC_TYPE free_f); 00041 00042 00043 00046 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI dkcAllocSameObjectPoolAuto(size_t object_size); 00047 00048 00049 00051 DKC_EXTERN int WINAPI dkcFreeSameObjectPool(DKC_SAME_OBJECT_POOL **p); 00052 00053 /* 00055 DKC_EXTERN int WINAPI 00056 dkcSameObjectPoolInit(DKC_SAME_OBJECT_POOL *p,size_t object_size,size_t max_num,DKC_ALLOC_FUNC_TYPE func); 00057 00059 DKC_EXTERN int WINAPI dkcSameObjectPoolUninit((DKC_SAME_OBJECT_POOL *p,DKC_FREE_FUNC_TYPE func); 00060 */ 00066 00067 DKC_EXTERN void *dkcSameObjectPoolAlloc(DKC_SAME_OBJECT_POOL *p); 00068 00075 00076 00077 DKC_EXTERN void WINAPI dkcSameObjectPoolRecycle(DKC_SAME_OBJECT_POOL *p, void *pv); 00078 00079 00080 DKC_EXTERN int WINAPI dkcSameObjectPoolReserve(DKC_SAME_OBJECT_POOL *p); 00081 00083 #define dkcSameObjectPoolFree(p) dkcFree((void **)&(p)) 00084 00085 #if 0 00086 00087 00088 typedef struct dkc_MemoryPool{ 00089 BYTE *mpool; 00090 00092 DKC_ARRAY_ONEBYONE *mAobo; 00093 00094 }DKC_MEMORY_POOL; 00095 00096 00097 DKC_EXTERN DKC_MEMORY_POOL *WINAPI dkcAllocMemoryPool(size_t poolsize,UINT flag); 00098 00099 DKC_EXTERN int WINAPI dkcFreeMemoryPool(DKC_MEMORY_POOL **); 00100 00101 00102 DKC_EXTERN void *WINAPI dkcMemoryPoolAlloc(size_t size); 00103 00104 DKC_EXTERN int WINAPI dkcMemoryPoolFree(void *p); 00105 00106 DKC_EXTERN int WINAPI dkcMemoryPoolSafeFree(void **pp); 00107 00108 #endif 00109 00110 #endif