00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef AXUTIL_ALLOCATOR_H
00019 #define AXUTIL_ALLOCATOR_H
00020
00026 #include <axutil_utils_defines.h>
00027
00028 #ifdef __cplusplus
00029 extern "C"
00030 {
00031 #endif
00032
00044 typedef struct axutil_allocator
00045 {
00046
00055 void *(
00056 AXIS2_CALL
00057 * malloc_fn)(
00058 struct axutil_allocator * allocator,
00059 size_t size);
00060
00070 void *(
00071 AXIS2_CALL
00072 * realloc)(
00073 struct axutil_allocator * allocator,
00074 void *ptr,
00075 size_t size);
00076
00085 void(
00086 AXIS2_CALL
00087 * free_fn)(
00088 struct axutil_allocator * allocator,
00089 void *ptr);
00090
00095 void *local_pool;
00096
00101 void *global_pool;
00102
00109 void *current_pool;
00110
00111 void *pool_allocator;
00112 int ref_pool_allocator;
00113
00114 void(
00115 AXIS2_CALL
00116 * pool_allocator_destroy)(
00117 struct axutil_allocator * allocator);
00118
00119 }
00120 axutil_allocator_t;
00121
00128 AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL
00129 axutil_allocator_init(
00130 axutil_allocator_t * allocator);
00131
00138 AXIS2_EXTERN void AXIS2_CALL
00139 axutil_allocator_free(
00140 axutil_allocator_t * allocator);
00141
00152 AXIS2_EXTERN void AXIS2_CALL
00153 axutil_allocator_switch_to_global_pool(
00154 axutil_allocator_t * allocator);
00155
00166 AXIS2_EXTERN void AXIS2_CALL
00167 axutil_allocator_switch_to_local_pool(
00168 axutil_allocator_t * allocator);
00169
00170 #define AXIS2_MALLOC(allocator, size) \
00171 ((allocator)->malloc_fn(allocator, size))
00172
00173 #define AXIS2_REALLOC(allocator, ptr, size) \
00174 ((allocator)->realloc(allocator, ptr, size))
00175
00176 #define AXIS2_FREE(allocator, ptr) \
00177 ((allocator)->free_fn(allocator, ptr))
00178
00179 #define AXIS2_POOL_ALLOCATOR_DESTROY(allocator) \
00180 ((allocator)->pool_allocator_destroy(allocator))
00181
00182
00185 #ifdef __cplusplus
00186 }
00187 #endif
00188
00189 #endif