18 ROXML_STATIC ROXML_INT
inline void roxml_release_last(
void *data)
23 while ((ptr->
prev != NULL) && (ptr->
prev->id != pthread_self()))
26 if (ptr->
prev == NULL)
29 to_delete = ptr->
prev;
31 if (to_delete->
next) {
32 to_delete->
prev->next = to_delete->
next;
33 to_delete->
next->prev = to_delete->
prev;
35 if (to_delete->
prev != &head_cell)
38 head_cell.
prev = NULL;
39 to_delete->
prev->next = NULL;
44 for (i = 0; i < to_delete->
occ; i++)
45 free(((
void **)(to_delete->
ptr))[i]);
54 ROXML_STATIC ROXML_INT
inline void roxml_release_all(
void *data)
58 head_cell.
prev = NULL;
60 while ((head_cell.
next != NULL)) {
61 to_delete = head_cell.
next;
68 for (i = 0; i < to_delete->
occ; i++)
69 free(((
void **)(to_delete->
ptr))[i]);
72 to_delete->
ptr = NULL;
78 ROXML_STATIC ROXML_INT
inline void roxml_release_pointer(
void *data)
83 while ((ptr->
next != NULL) && (ptr->
next->ptr != data))
86 if (ptr->
next == NULL)
89 to_delete = ptr->
next;
90 if (to_delete->
next) {
91 to_delete->
next->prev = ptr;
93 if (ptr == &head_cell)
94 head_cell.
prev = NULL;
101 for (i = 0; i < to_delete->
occ; i++)
102 free(((
void **)(to_delete->
ptr))[i]);
104 free(to_delete->
ptr);
112 roxml_release_last(data);
114 roxml_release_all(data);
116 roxml_release_pointer(data);
118 if (head_cell.
next == &head_cell)
119 head_cell.
next = NULL;
120 if (head_cell.
prev == &head_cell)
121 head_cell.
prev = NULL;
127 while (cell->
next != NULL)
134 cell->
next->next = NULL;
135 cell->
next->prev = cell;
138 cell->
id = pthread_self();
140 cell->
ptr = calloc(num, size);
141 head_cell.
prev = cell;
memory_cell_t head_cell
head of memory manager
ROXML_API void roxml_release(void *data)
memory cleanning function
struct memory_cell * prev
XML internal memory management module.
struct memory_cell * next
ROXML_INT void * roxml_malloc(int size, int num, int type)
alloc memory function