00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __PJ_POOL_ALT_H__
00021 #define __PJ_POOL_ALT_H__
00022
00023 #define __PJ_POOL_H__
00024
00025
00032 typedef void pj_pool_callback(pj_pool_t *pool, pj_size_t size);
00033
00034 struct pj_pool_mem
00035 {
00036 struct pj_pool_mem *next;
00037
00038
00039 };
00040
00041
00042 struct pj_pool_t
00043 {
00044 struct pj_pool_mem *first_mem;
00045 pj_pool_factory *factory;
00046 char obj_name[32];
00047 pj_size_t used_size;
00048 pj_pool_callback *cb;
00049 };
00050
00051
00052 #define PJ_POOL_SIZE (sizeof(struct pj_pool_t))
00053
00058 extern int PJ_NO_MEMORY_EXCEPTION;
00059
00060
00061
00062
00063
00064
00065
00066 #define pj_pool_create(fc,nm,init,inc,cb) \
00067 pj_pool_create_imp(__FILE__, __LINE__, fc, nm, init, inc, cb)
00068
00069 #define pj_pool_release(pool) pj_pool_release_imp(pool)
00070 #define pj_pool_getobjname(pool) pj_pool_getobjname_imp(pool)
00071 #define pj_pool_reset(pool) pj_pool_reset_imp(pool)
00072 #define pj_pool_get_capacity(pool) pj_pool_get_capacity_imp(pool)
00073 #define pj_pool_get_used_size(pool) pj_pool_get_used_size_imp(pool)
00074 #define pj_pool_alloc(pool,sz) \
00075 pj_pool_alloc_imp(__FILE__, __LINE__, pool, sz)
00076
00077 #define pj_pool_calloc(pool,cnt,elem) \
00078 pj_pool_calloc_imp(__FILE__, __LINE__, pool, cnt, elem)
00079
00080 #define pj_pool_zalloc(pool,sz) \
00081 pj_pool_zalloc_imp(__FILE__, __LINE__, pool, sz)
00082
00083
00084
00085
00086
00087
00088
00089
00090 PJ_DECL(pj_pool_t*) pj_pool_create_imp(const char *file, int line,
00091 void *factory,
00092 const char *name,
00093 pj_size_t initial_size,
00094 pj_size_t increment_size,
00095 pj_pool_callback *callback);
00096
00097
00098 PJ_DECL(void) pj_pool_release_imp(pj_pool_t *pool);
00099
00100
00101 PJ_DECL(const char*) pj_pool_getobjname_imp(pj_pool_t *pool);
00102
00103
00104 PJ_DECL(void) pj_pool_reset_imp(pj_pool_t *pool);
00105
00106
00107 PJ_DECL(pj_size_t) pj_pool_get_capacity_imp(pj_pool_t *pool);
00108
00109
00110 PJ_DECL(pj_size_t) pj_pool_get_used_size_imp(pj_pool_t *pool);
00111
00112
00113 PJ_DECL(void*) pj_pool_alloc_imp(const char *file, int line,
00114 pj_pool_t *pool, pj_size_t sz);
00115
00116
00117 PJ_DECL(void*) pj_pool_calloc_imp(const char *file, int line,
00118 pj_pool_t *pool, unsigned cnt,
00119 unsigned elemsz);
00120
00121
00122 PJ_DECL(void*) pj_pool_zalloc_imp(const char *file, int line,
00123 pj_pool_t *pool, pj_size_t sz);
00124
00125
00126 #define PJ_POOL_ZALLOC_T(pool,type) \
00127 ((type*)pj_pool_zalloc(pool, sizeof(type)))
00128 #define PJ_POOL_ALLOC_T(pool,type) \
00129 ((type*)pj_pool_alloc(pool, sizeof(type)))
00130 #ifndef PJ_POOL_ALIGNMENT
00131 # define PJ_POOL_ALIGNMENT 4
00132 #endif
00133
00137 typedef struct pj_pool_factory_policy
00138 {
00148 void* (*block_alloc)(pj_pool_factory *factory, pj_size_t size);
00149
00157 void (*block_free)(pj_pool_factory *factory, void *mem, pj_size_t size);
00158
00162 pj_pool_callback *callback;
00163
00167 unsigned flags;
00168
00169 } pj_pool_factory_policy;
00170
00171 struct pj_pool_factory
00172 {
00173 pj_pool_factory_policy policy;
00174 int dummy;
00175 };
00176
00177 struct pj_caching_pool
00178 {
00179 pj_pool_factory factory;
00180
00181
00182 unsigned used_count;
00183 unsigned used_size;
00184 unsigned peak_used_size;
00185 };
00186
00187
00188 typedef struct pj_pool_block
00189 {
00190 int dummy;
00191 } pj_pool_block;
00192
00193 #define pj_caching_pool_init( cp, pol, mac)
00194 #define pj_caching_pool_destroy(cp)
00195 #define pj_pool_factory_dump(pf, detail)
00196
00197 #endif
00198