5#ifndef _ZFI_ZFMemPool_h_
6#define _ZFI_ZFMemPool_h_
15#ifndef ZF_ENV_ZFMEMPOOL_ENABLE
16 #if _ZFP_ZFMEM_LOG_DISABLE_MEMPOOL
17 #define ZF_ENV_ZFMEMPOOL_ENABLE 0
19 #define ZF_ENV_ZFMEMPOOL_ENABLE 1
28#if ZF_ENV_ZFMEMPOOL_ENABLE
29 #define zfpoolDeclareFriend() \
30 friend zfclassFwd _ZFP_MP_Obj<zfself>;
32 #define zfpoolDeclareFriend() zfmemDeclareFriend()
43#if ZF_ENV_ZFMEMPOOL_ENABLE
44 #define zfunsafe_zfpoolNew(T_Type, ...) zfnewPlacement((_ZFP_MP_Obj<T_Type >::pNew()), T_Type, ##__VA_ARGS__)
45 #define zfunsafe_zfpoolDelete(obj) _ZFP_zfpoolDelete(obj)
47 #define zfunsafe_zfpoolNew(T_Type, ...) zfnew(T_Type, ##__VA_ARGS__)
48 #define zfunsafe_zfpoolDelete(obj) zfdelete(obj)
61#if ZF_ENV_ZFMEMPOOL_ENABLE
62 #define zfunsafe_zfpoolMalloc(size) _ZFP_MP_malloc(size)
63 #define zfunsafe_zfpoolRealloc(p, size) _ZFP_MP_realloc((p), (size))
64 #define zfunsafe_zfpoolFree(p) _ZFP_MP_free(p)
66 #define zfunsafe_zfpoolMalloc(size) zfmalloc(size)
67 #define zfunsafe_zfpoolRealloc(p, size) zfrealloc((p), (size))
68 #define zfunsafe_zfpoolFree(p) zffree(p)
79#if ZF_ENV_ZFMEMPOOL_ENABLE
80 #define zfpoolNew(T_Type, ...) (ZFCoreMutexLockerHolder(), zfunsafe_zfpoolNew(T_Type, ##__VA_ARGS__))
81 #define zfpoolDelete(obj) (ZFCoreMutexLockerHolder(), zfunsafe_zfpoolDelete(obj))
83 #define zfpoolNew(T_Type, ...) zfnew(T_Type, ##__VA_ARGS__)
84 #define zfpoolDelete(obj) zfdelete(obj)
97#if ZF_ENV_ZFMEMPOOL_ENABLE
98 #define zfpoolMalloc(size) (ZFCoreMutexLockerHolder(), zfunsafe_zfpoolMalloc(size))
99 #define zfpoolRealloc(p, size) (ZFCoreMutexLockerHolder(), zfunsafe_zfpoolRealloc((p), (size)))
100 #define zfpoolFree(p) (ZFCoreMutexLockerHolder(), zfunsafe_zfpoolFree(p))
102 #define zfpoolMalloc(size) zfmalloc(size)
103 #define zfpoolRealloc(p, size) zfrealloc((p), (size))
104 #define zfpoolFree(p) zffree(p)
114#if ZF_ENV_ZFMEMPOOL_ENABLE
119 _A = (N <=
sizeof(
void *) * 4
121 : N <=
sizeof(
void *) * 32
123 :
sizeof(
void *) * 32
125 V = ((N % _A) == 0 ? N : ((N / _A) + 1) * _A),
126 M = (N <=
sizeof(
void *) * 4
128 : N <=
sizeof(
void *) * 8
130 : N <=
sizeof(
void *) * 32
132 : N <=
sizeof(
void *) * 256
147 static void *pNew(
void) {
148 _ZFP_MP_D &d = _instance();
150 _ZFP_MP_B<N> *t = (_ZFP_MP_B<N> *)d.available;
151 d.available = t->next;
156 return zfmalloc(
sizeof(_ZFP_MP_B<N>));
159 static void pDel(
ZF_IN void *obj) {
160 _ZFP_MP_D &d = _instance();
161 if(d.count >= _ZFP_MP_SA<N>::M) {
166 _ZFP_MP_B<N> *t = (_ZFP_MP_B<N> *)obj;
167 t->next = (_ZFP_MP_B<N> *)d.available;
172 static _ZFP_MP_D &_instance(
void) {
173 static _ZFP_MP_D &d = _ZFP_MP_A(N);
178template<
typename T_Type>
181 static void *pNew(
void) {
182 return _ZFP_MP_H<_ZFP_MP_SA<
sizeof(T_Type)>::V>::pNew();
184 static void pDel(
ZF_IN T_Type *obj) {
186 _ZFP_MP_H<_ZFP_MP_SA<
sizeof(T_Type)>::V>::pDel(obj);
189template<
typename T_Type>
190inline void _ZFP_zfpoolDelete(
ZF_IN T_Type *obj) {
192 _ZFP_MP_Obj<T_Type>::pDel(obj);
201 V = _ZFP_MP_SA<_ZFP_MP_mallocSA<N - 1>::V + 1>::V,
208 V = _ZFP_MP_SA<1>::V,
215 return (((
zfbyte *)p) +
sizeof(
void *));
224 else if(size <= _ZFP_MP_mallocSA<1>::V -
sizeof(
void *)) {
225 return _ZFP_MP_mallocFix(_ZFP_MP_H<_ZFP_MP_mallocSA<1>::V>::pNew(), size);
227 else if(size <= _ZFP_MP_mallocSA<2>::V -
sizeof(
void *)) {
228 return _ZFP_MP_mallocFix(_ZFP_MP_H<_ZFP_MP_mallocSA<2>::V>::pNew(), size);
230 else if(size <= _ZFP_MP_mallocSA<3>::V -
sizeof(
void *)) {
231 return _ZFP_MP_mallocFix(_ZFP_MP_H<_ZFP_MP_mallocSA<3>::V>::pNew(), size);
233 else if(size <= _ZFP_MP_mallocSA<4>::V -
sizeof(
void *)) {
234 return _ZFP_MP_mallocFix(_ZFP_MP_H<_ZFP_MP_mallocSA<4>::V>::pNew(), size);
236 else if(size <= _ZFP_MP_mallocSA<5>::V -
sizeof(
void *)) {
237 return _ZFP_MP_mallocFix(_ZFP_MP_H<_ZFP_MP_mallocSA<5>::V>::pNew(), size);
240 return _ZFP_MP_mallocFix(
zfmalloc(size +
sizeof(
void *)), size);
243inline void _ZFP_MP_free(
ZF_IN void *p) {
247 p = ((
zfbyte *)p) -
sizeof(
void *);
251 else if(size <= _ZFP_MP_mallocSA<1>::V -
sizeof(
void *)) {
252 _ZFP_MP_H<_ZFP_MP_mallocSA<1>::V>::pDel(p);
254 else if(size <= _ZFP_MP_mallocSA<2>::V -
sizeof(
void *)) {
255 _ZFP_MP_H<_ZFP_MP_mallocSA<2>::V>::pDel(p);
257 else if(size <= _ZFP_MP_mallocSA<3>::V -
sizeof(
void *)) {
258 _ZFP_MP_H<_ZFP_MP_mallocSA<3>::V>::pDel(p);
260 else if(size <= _ZFP_MP_mallocSA<4>::V -
sizeof(
void *)) {
261 _ZFP_MP_H<_ZFP_MP_mallocSA<4>::V>::pDel(p);
263 else if(size <= _ZFP_MP_mallocSA<5>::V -
sizeof(
void *)) {
264 _ZFP_MP_H<_ZFP_MP_mallocSA<5>::V>::pDel(p);
272 return _ZFP_MP_malloc(size);
275 if(size <= sizeOld) {
278 else if(sizeOld <= _ZFP_MP_mallocSA<1>::V -
sizeof(
void *)) {
279 if(size <= _ZFP_MP_mallocSA<1>::V -
sizeof(
void *)) {
283 else if(sizeOld <= _ZFP_MP_mallocSA<2>::V -
sizeof(
void *)) {
284 if(size <= _ZFP_MP_mallocSA<2>::V -
sizeof(
void *)) {
288 else if(sizeOld <= _ZFP_MP_mallocSA<3>::V -
sizeof(
void *)) {
289 if(size <= _ZFP_MP_mallocSA<3>::V -
sizeof(
void *)) {
293 else if(sizeOld <= _ZFP_MP_mallocSA<4>::V -
sizeof(
void *)) {
294 if(size <= _ZFP_MP_mallocSA<4>::V -
sizeof(
void *)) {
298 else if(sizeOld <= _ZFP_MP_mallocSA<5>::V -
sizeof(
void *)) {
299 if(size <= _ZFP_MP_mallocSA<5>::V -
sizeof(
void *)) {
303 void *pNew = _ZFP_MP_malloc(size);
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define zffree(ptr)
same as free defined for future use, see zfnew for more info
Definition ZFCoreTypeDef_ClassType.h:98
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:196
#define zfclassPOD
shows the class is a POD type
Definition ZFCoreTypeDef_ClassType.h:35
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
void * zfmemcpy(void *dst, const void *src, zfindex size)
wrapper to memcpy
Definition ZFCoreTypeDef_ClassType.h:156
#define zfmalloc(size)
same as malloc defined for future use, see zfnew for more info
Definition ZFCoreTypeDef_ClassType.h:90
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
#define zffalse
bool false type
Definition ZFCoreTypeDef_CoreType.h:111
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
_ZFT_t_zfbyte zfbyte
8-bit unsigned value, see zfindex
Definition ZFCoreTypeDef_CoreType.h:194
_ZFT_t_zfuint zfuint
same as unsigned int, see zfindex
Definition ZFCoreTypeDef_CoreType.h:169
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98