From 56f138f1de82d4bf7e21282f115fbcb63a6fe4d4 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Mon, 25 May 2020 00:47:06 -0400 Subject: Fix index function for double ended queue. Double ended queue's did not account for pushing in-front of the base i.e. a truly circular buffer, this is the start to fixing that across all functions. --- collections/double_ended_queue.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'collections') diff --git a/collections/double_ended_queue.c b/collections/double_ended_queue.c index 967a716..88d4641 100644 --- a/collections/double_ended_queue.c +++ b/collections/double_ended_queue.c @@ -117,11 +117,18 @@ void* deq_index(root, index) deq *root; int index; { - if (!root || root->beg + index >= root->end) { + void *tmp; + + if (!root) { + return NULL; + } + + tmp = root->base + (root->beg + index - root->base) % root->limit); + if (tmp > root->end) { return NULL; } - return root->beg[index]; + return *tmp; } void* deq_pop_back(root) -- cgit v1.1