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 00033 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI 00034 dkcAllocSameObjectPool(size_t object_size,size_t max_num, 00035 DKC_ALLOC_FUNC_TYPE alloc_f,DKC_FREE_FUNC_TYPE free_f); 00036 00037 00038 00041 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI dkcAllocSameObjectPoolAuto(size_t object_size); 00042 00043 00044 00046 DKC_EXTERN int WINAPI dkcFreeSameObjectPool(DKC_SAME_OBJECT_POOL **p); 00047 00048 /* 00050 DKC_EXTERN int WINAPI 00051 dkcSameObjectPoolInit(DKC_SAME_OBJECT_POOL *p,size_t object_size,size_t max_num,DKC_ALLOC_FUNC_TYPE func); 00052 00054 DKC_EXTERN int WINAPI dkcSameObjectPoolUninit((DKC_SAME_OBJECT_POOL *p,DKC_FREE_FUNC_TYPE func); 00055 */ 00061 00062 DKC_EXTERN void *dkcSameObjectPoolAlloc(DKC_SAME_OBJECT_POOL *p); 00063 00070 00071 00072 DKC_EXTERN void WINAPI dkcSameObjectPoolRecycle(DKC_SAME_OBJECT_POOL *p, void *pv); 00073 00074 00075 DKC_EXTERN int WINAPI dkcSameObjectPoolReserve(DKC_SAME_OBJECT_POOL *p); 00076 00078 #define dkcSameObjectPoolFree(p) dkcFree((void **)&(p)) 00079 00080 #if 0 00081 00082 00083 typedef struct dkc_MemoryPool{ 00084 BYTE *mpool; 00085 00087 DKC_ARRAY_ONEBYONE *mAobo; 00088 00089 }DKC_MEMORY_POOL; 00090 00091 00092 DKC_EXTERN DKC_MEMORY_POOL *WINAPI dkcAllocMemoryPool(size_t poolsize,UINT flag); 00093 00094 DKC_EXTERN int WINAPI dkcFreeMemoryPool(DKC_MEMORY_POOL **); 00095 00096 00097 DKC_EXTERN void *WINAPI dkcMemoryPoolAlloc(size_t size); 00098 00099 DKC_EXTERN int WINAPI dkcMemoryPoolFree(void *p); 00100 00101 DKC_EXTERN int WINAPI dkcMemoryPoolSafeFree(void **pp); 00102 00103 #endif 00104 00105 #endif