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