aboutsummaryrefslogtreecommitdiff
path: root/collections
diff options
context:
space:
mode:
Diffstat (limited to 'collections')
-rw-r--r--collections/double_ended_queue.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/collections/double_ended_queue.c b/collections/double_ended_queue.c
index 81bee47..8a6a91e 100644
--- a/collections/double_ended_queue.c
+++ b/collections/double_ended_queue.c
@@ -104,14 +104,19 @@ void deq_push_front(root, item)
deq *root;
void *item;
{
+ void *tmp;
+
if (!root) {
return;
}
- if (root->end == root->base + root->limit) {
+
+ tmp = (root->base + ((root->beg - 1) - root->base) % root->limit);
+ if (tmp == root->beg) {
deq_resize(root);
+ tmp = (root->base + ((root->beg - 1) - root->base) % root->limit);
}
- *(root->end++) = item;
+ *(root->beg = tmp) = item;
}
void* deq_pop_front(root)