From 00f912a5043bf8211a330e2a170d3c7ce0a94b6b Mon Sep 17 00:00:00 2001 From: Patrick Pelissier Date: Sun, 19 Mar 2017 22:15:01 +0100 Subject: [PATCH] Replace M_MEMORY_ALLOC / M_MEMORY_FREE by M_GET_NEW / M_GET_DEL It allows a dual layer of overloading for the memory. --- m-array.h | 16 ++++++++-------- m-buffer.h | 4 ++-- m-list.h | 12 ++++++------ m-rbtree.h | 22 +++++++++++++++++----- 4 files changed, 33 insertions(+), 21 deletions(-) diff --git a/m-array.h b/m-array.h index d57f1411..4461008f 100644 --- a/m-array.h +++ b/m-array.h @@ -135,7 +135,7 @@ { \ assert (v != NULL && v->size <= v->alloc); \ M_C3(array_, name, _clean)(v); \ - M_MEMORY_FREE(v->ptr); \ + M_GET_DEL oplist(v->ptr); \ v->alloc = 0; \ v->ptr = NULL; \ } \ @@ -149,7 +149,7 @@ if (d == s) return; \ if (s->size > d->alloc) { \ size_t alloc = ARRAYI_INC_ALLOC_SIZE(s->size); \ - type *ptr = M_MEMORY_REALLOC (type, d->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, d->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return ; \ @@ -220,7 +220,7 @@ assert(v->size == v->alloc); \ size_t alloc = ARRAYI_INC_ALLOC_SIZE(v->alloc); \ assert (alloc > v->size); \ - type *ptr = M_MEMORY_REALLOC (type, v->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return NULL; \ @@ -263,7 +263,7 @@ assert(v->size == v->alloc); \ size_t alloc = ARRAYI_INC_ALLOC_SIZE(v->alloc); \ assert (alloc > v->size); \ - type *ptr = M_MEMORY_REALLOC (type, v->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return; \ @@ -290,7 +290,7 @@ /* Increase size of array */ \ if (size > v->alloc) { \ size_t alloc = size ; \ - type *ptr = M_MEMORY_REALLOC (type, v->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return; \ @@ -314,7 +314,7 @@ /* Increase size of array */ \ if (size > v->alloc) { \ size_t alloc = ARRAYI_INC_ALLOC_SIZE (size) ; \ - type *ptr = M_MEMORY_REALLOC (type, v->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return; \ @@ -388,7 +388,7 @@ size_t size = v->size + (j-i); \ if (size > v->alloc) { \ size_t alloc = ARRAYI_INC_ALLOC_SIZE (size) ; \ - type *ptr = M_MEMORY_REALLOC (type, v->ptr, alloc); \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ if (ptr == NULL) { \ M_MEMORY_FULL(sizeof (type) * alloc); \ return; \ @@ -456,7 +456,7 @@ M_C3(array_, name, _shrink_to_fit)(M_C3(array_, name,_t) v) \ { \ assert (v != NULL && v->size <= v->alloc); \ - v->ptr = M_MEMORY_REALLOC (type, v->ptr, v->size); \ + v->ptr = M_GET_REALLOC oplist (type, v->ptr, v->size); \ assert(v->ptr != NULL || v->size == 0); \ v->alloc = v->size; \ } \ diff --git a/m-buffer.h b/m-buffer.h index 10ae1724..69fa89b7 100644 --- a/m-buffer.h +++ b/m-buffer.h @@ -77,7 +77,7 @@ static inline void \ m_cond_init(v->there_is_room_for_data); \ } else \ assert(((policy)&BUFFER_UNBLOCKING) == BUFFER_UNBLOCKING); \ - v->data = M_MEMORY_REALLOC (type, NULL, BUFFERI_SIZE(m_size)); \ + v->data = M_GET_REALLOC oplist (type, NULL, BUFFERI_SIZE(m_size)); \ if (v->data == NULL) { \ M_MEMORY_FULL (BUFFERI_SIZE(m_size)*sizeof(type)); \ return; \ @@ -110,7 +110,7 @@ static inline void \ M_C3(buffer_, name, _clear)(M_C3(buffer_, name,_t) v) \ { \ M_C3(bufferi_, name, _clear_obj)(v); \ - M_MEMORY_FREE (v->data); \ + M_GET_DEL oplist (v->data); \ v->data = NULL; \ if (((policy) & BUFFER_THREAD_UNSAFE) != BUFFER_THREAD_UNSAFE) { \ m_mutex_clear(v->mutex); \ diff --git a/m-list.h b/m-list.h index f103da7c..09475931 100644 --- a/m-list.h +++ b/m-list.h @@ -122,7 +122,7 @@ while (it != NULL) { \ struct M_C3(list_, name, _s) *next = it->next; \ M_GET_CLEAR oplist(it->data); \ - M_MEMORY_FREE (it); \ + M_GET_DEL oplist (it); \ it = next; \ } \ *v = NULL; \ @@ -146,7 +146,7 @@ { \ assert (v != NULL); \ struct M_C3(list_, name, _s) *next; \ - next = M_MEMORY_ALLOC (struct M_C3(list_, name, _s)); \ + next = M_GET_NEW oplist (struct M_C3(list_, name, _s)); \ if (next == NULL) { \ M_MEMORY_FULL(sizeof (struct M_C3(list_, name, _s))); \ return NULL; \ @@ -186,7 +186,7 @@ M_GET_CLEAR oplist((*v)->data); \ struct M_C3(list_, name, _s) *tofree = *v; \ *v = (*v)->next; \ - M_MEMORY_FREE (tofree); \ + M_GET_DEL oplist (tofree); \ } \ \ static inline bool \ @@ -336,7 +336,7 @@ assert (list != NULL && insertion_point != NULL); \ assert(M_C3(list_, name, _sublist_p)(list, insertion_point)); \ struct M_C3(list_, name, _s) *next; \ - next = M_MEMORY_ALLOC (struct M_C3(list_, name, _s)); \ + next = M_GET_NEW oplist (struct M_C3(list_, name, _s)); \ if (next == NULL) { \ M_MEMORY_FULL(sizeof (struct M_C3(list_, name, _s))); \ return; \ @@ -365,7 +365,7 @@ removing_point->previous->next = next; \ } \ M_GET_CLEAR oplist(removing_point[0].l[0]->data); \ - M_MEMORY_FREE (removing_point[0].l[0]); \ + M_GET_DEL oplist (removing_point[0].l[0]); \ removing_point[0].l[0] = next; \ } \ \ @@ -404,7 +404,7 @@ update_list = list; \ it_org = *org; \ while (it_org != NULL) { \ - next = M_MEMORY_ALLOC (struct M_C3(list_, name, _s)); \ + next = M_GET_NEW oplist (struct M_C3(list_, name, _s)); \ *update_list = next; \ if (next == NULL) { \ M_MEMORY_FULL(sizeof (struct M_C3(list_, name, _s))); \ diff --git a/m-rbtree.h b/m-rbtree.h index 5854a54b..868b611c 100644 --- a/m-rbtree.h +++ b/m-rbtree.h @@ -187,7 +187,7 @@ typedef enum { } \ assert (n == stack[cpt - 1]); \ M_GET_CLEAR oplist (n->data); \ - M_MEMORY_FREE (n); \ + M_GET_DEL oplist (n); \ assert((stack[cpt-1] = NULL) == NULL); \ cpt--; \ } \ @@ -211,7 +211,11 @@ typedef enum { node_t *n = tree->node; \ /* If nothing, create new node */ \ if (n == NULL) { \ - n = M_MEMORY_ALLOC(node_t); \ + n = M_GET_NEW oplist(node_t); \ + if (n == NULL) { \ + M_MEMORY_FULL(sizeof (node_t)); \ + return; \ + } \ M_GET_INIT_SET oplist (n->data, data); \ n->child[0] = n->child[1] = NULL; \ RBTREEI_SET_BLACK (n); \ @@ -246,7 +250,11 @@ typedef enum { return; \ } \ /* Create new */ \ - n = M_MEMORY_ALLOC(node_t); \ + n = M_GET_NEW oplist(node_t); \ + if (n == NULL) { \ + M_MEMORY_FULL (sizeof (node_t)); \ + return; \ + } \ M_GET_INIT_SET oplist (n->data, data); \ n->child[0] = n->child[1] = NULL; \ RBTREEI_SET_RED (n); \ @@ -522,7 +530,11 @@ typedef enum { M_C3(rbtreei_,name,_copyn)(const node_t *o) \ { \ if (o == NULL) return NULL; \ - node_t *n = M_MEMORY_ALLOC(node_t); \ + node_t *n = M_GET_NEW oplist(node_t); \ + if (n == NULL) { \ + M_MEMORY_FULL (sizeof (node_t)); \ + return NULL; \ + } \ M_GET_INIT_SET oplist (n->data, o->data); \ n->child[0] = M_C3(rbtreei_,name,_copyn)(o->child[0]); \ n->child[1] = M_C3(rbtreei_,name,_copyn)(o->child[1]); \ @@ -780,7 +792,7 @@ typedef enum { if (data_ptr != NULL) \ M_GET_SET oplist (*data_ptr, n->data); \ M_GET_CLEAR oplist (n->data); \ - M_MEMORY_FREE (n); \ + M_GET_DEL oplist (n); \ tree->size --; \ RBTREEI_CONTRACT (tree); \ return true; \