Reuse memory node in case of pop from the opposite side

if there is at least one free node in the opposite side.
This reduce the memory consumption ***a lot*** for FIFO queues
usage.
This commit is contained in:
Patrick Pelissier committed 2018-02-21 21:50:40 +01:00
1 parent eb4cbe863e
commit 39fca33958
1 file changed
+18 -2
+18 -2
View File
@@ -266,7 +266,15 @@
size_t index = d->back->index; \
index --; \
if (M_UNLIKELY (n->size <= index)) { \
/* TODO: p = next(n). If (p) unlink + free(p) */ \
/* If there is a next node, \
pop the back node and push it back to the front. This \
reduce the used memory if the deque is used as a FIFO queue.*/ \
deque_node_t *next = M_C(name, _node_list_next_obj)(d->list, n); \
if (next != NULL) { \
next = deque_node_list_pop_back(d->list); \
assert (next != n); \
deque_node_list_push_front(d->list, next); \
} \
n = deque_node_list_previous_obj(d->list, n); \
assert (n != NULL); \
d->back->node = n; \
@@ -292,7 +300,15 @@
deque_node_t *n = d->front->node; \
size_t index = d->front->index; \
if (M_UNLIKELY (n->size <= index)) { \
/* TODO: p = previous(n). If (p) unlink + free(p) */ \
/* If there is a previous node, \
pop the front node and push it back to the back. This \
reduce the used memory if the deque is used as a FIFO queue.*/ \
deque_node_t *prev = M_C(name, _node_list_previous_obj)(d->list, n); \
if (prev != NULL) { \
prev = deque_node_list_pop_front(d->list); \
assert (prev != n); \
deque_node_list_push_back(d->list, prev); \
} \
n = deque_node_list_next_obj(d->list, n); \
assert (n != NULL); \
d->front->node = n; \