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 axutil_allocator_t;
00112
00119 AXIS2_EXTERN axutil_allocator_t *AXIS2_CALL
00120 axutil_allocator_init(
00121 axutil_allocator_t * allocator);
00122
00129 AXIS2_EXTERN void AXIS2_CALL
00130 axutil_allocator_free(
00131 axutil_allocator_t * allocator);
00132
00143 AXIS2_EXTERN void AXIS2_CALL
00144 axutil_allocator_switch_to_global_pool(
00145 axutil_allocator_t * allocator);
00146
00157 AXIS2_EXTERN void AXIS2_CALL
00158 axutil_allocator_switch_to_local_pool(
00159 axutil_allocator_t * allocator);
00160
00161 #define AXIS2_MALLOC(allocator, size) \
00162 ((allocator)->malloc_fn(allocator, size))
00163
00164 #define AXIS2_REALLOC(allocator, ptr, size) \
00165 ((allocator)->realloc(allocator, ptr, size))
00166
00167 #define AXIS2_FREE(allocator, ptr) \
00168 ((allocator)->free_fn(allocator, ptr))
00169
00172 #ifdef __cplusplus
00173 }
00174 #endif
00175
00176 #endif