00001 #ifndef DKC_MEMORY_POOL_H 00002 #define DKC_MEMORY_POOL_H 00003 00004 #include "dkcOSIndependent.h" 00005 #include "dkcArrayOneByOne.h" 00006 00007 typedef struct dkc_SameObjectPoolNode{ 00009 void *pool; 00010 00011 struct dkc_SameObjectPoolNode *next; 00012 00013 }DKC_SAME_OBJECT_POOL_NODE; 00014 00015 00016 00017 typedef struct dkc_SameObjectPool{ 00019 size_t max_num; 00021 size_t now_num; 00023 size_t obj_size; 00024 00026 DKC_SAME_OBJECT_POOL_NODE **recycle_pool; 00028 size_t recycle_size; 00030 BYTE *flag; 00031 00032 //数珠プールの尻尾 00033 //DKC_SAME_OBJECT_POOL_NODE *tail; 00035 DKC_SAME_OBJECT_POOL_NODE *root; 00036 00037 }DKC_SAME_OBJECT_POOL; 00038 00039 00040 00041 enum{ 00042 edkcSameObjectPool_Dynamic, 00043 edkcSameObjectPool_Static, 00044 }; 00045 00047 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI dkcAllocSameObjectPool(size_t object_size,size_t max_num,size_t recycle_size); 00048 00051 DKC_EXTERN DKC_SAME_OBJECT_POOL *WINAPI dkcAllocSameObjectPoolDynamic(size_t object_size); 00052 00054 DKC_EXTERN int WINAPI dkcFreeSameObjectPool(DKC_SAME_OBJECT_POOL **p); 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 DKC_EXTERN int WINAPI dkcSameObjectPoolReserve(DKC_SAME_OBJECT_POOL *p); 00075 00077 #define dkcSameObjectPoolFree(p) dkcFree((void **)&(p)); 00078 00079 00080 typedef struct dkc_MemoryPool{ 00081 BYTE *mpool; 00082 00084 DKC_ARRAY_ONEBYONE *mAobo; 00085 00086 }DKC_MEMORY_POOL; 00087 00088 00089 DKC_EXTERN DKC_MEMORY_POOL *WINAPI dkcAllocMemoryPool(size_t poolsize,UINT flag); 00090 00091 DKC_EXTERN int WINAPI dkcFreeMemoryPool(DKC_MEMORY_POOL **); 00092 00093 00094 DKC_EXTERN void *WINAPI dkcMemoryPoolAlloc(size_t size); 00095 00096 DKC_EXTERN int WINAPI dkcMemoryPoolFree(void *p); 00097 00098 DKC_EXTERN int WINAPI dkcMemoryPoolSafeFree(void **pp); 00099 00100 #endif