From 0f7085dedd2f60f2ccc0b1f49558f5be89de97b2 Mon Sep 17 00:00:00 2001 From: Tucker Evans Date: Wed, 10 Jun 2020 23:23:52 -0400 Subject: Fix change order of functions in double ended queue. Groups functions that return items together. --- collections/double_ended_queue.adoc | 32 +++++++------- collections/double_ended_queue.c | 88 ++++++++++++++++++------------------- collections/double_ended_queue.h | 10 ++--- 3 files changed, 63 insertions(+), 67 deletions(-) diff --git a/collections/double_ended_queue.adoc b/collections/double_ended_queue.adoc index 00c6dad..f583df3 100644 --- a/collections/double_ended_queue.adoc +++ b/collections/double_ended_queue.adoc @@ -176,9 +176,9 @@ deq_push_back(queue, NULL); assert(deq_size(queue) == 1); ---- -+void* deq_pop_front(deq *self)+ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Pops an item off of the front of the queue +self+. ++void deq_set(deq *self, int index, void *item)+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Sets the element at position +index+ in +self+ to +item+. Examples ^^^^^^^^ @@ -194,13 +194,15 @@ deq *queue = deq_new(); deq_push_back(queue, str_dup(str1)); deq_push_back(queue, str_dup(str2)); -assert(str_cmp(deq_pop_front(queue), str1) == 0); -assert(str_cmp(deq_pop_front(queue), str2) == 0); +deq_set(queue, 0, str2); + +assert(str_cmp(deq_pop_back(queue), str2) == 0); +assert(str_cmp(deq_pop_back(queue), str2) == 0); ---- -+void* deq_pop_back(deq *self)+ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Pops an item off of the back of the queue +self+. ++void* deq_pop_front(deq *self)+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Pops an item off of the front of the queue +self+. Examples ^^^^^^^^ @@ -216,13 +218,13 @@ deq *queue = deq_new(); deq_push_back(queue, str_dup(str1)); deq_push_back(queue, str_dup(str2)); -assert(str_cmp(deq_pop_back(queue), str2) == 0); -assert(str_cmp(deq_pop_back(queue), str1) == 0); +assert(str_cmp(deq_pop_front(queue), str1) == 0); +assert(str_cmp(deq_pop_front(queue), str2) == 0); ---- -+void deq_set(deq *self, int index, void *item)+ -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Sets the element at position +index+ in +self+ to +item+. ++void* deq_pop_back(deq *self)+ +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Pops an item off of the back of the queue +self+. Examples ^^^^^^^^ @@ -238,10 +240,8 @@ deq *queue = deq_new(); deq_push_back(queue, str_dup(str1)); deq_push_back(queue, str_dup(str2)); -deq_set(queue, 0, str2); - -assert(str_cmp(deq_pop_back(queue), str2) == 0); assert(str_cmp(deq_pop_back(queue), str2) == 0); +assert(str_cmp(deq_pop_back(queue), str1) == 0); ---- +void* deq_index(deq *self, int index)+ diff --git a/collections/double_ended_queue.c b/collections/double_ended_queue.c index 7857c3a..bf329ca 100644 --- a/collections/double_ended_queue.c +++ b/collections/double_ended_queue.c @@ -111,16 +111,6 @@ deq *root; root->base = tmp; } -void deq_set(root, index, item) -deq *root; -int index; -void *item; -{ - if (!root || !DEQ_IN_BOUNDS(root, index)) - return; - root->base[(root->beg + index) % root->limit] = item; -} - void* deq_index(root, index) deq *root; int index; @@ -133,7 +123,7 @@ int index; return root->base[(root->beg + index) % root->limit]; } -void deq_push_back(root, item) +void deq_push_front(root, item) deq *root; void *item; { @@ -145,14 +135,16 @@ void *item; if (root->end >= root->limit) deq_resize(root); - root->base[root->end++] = item; - root->end %= root->limit; + --root->beg; + root->beg %= root->limit; + + root->base[root->beg] = item; if (root->end == root->beg) root->end = root->limit; } -void deq_push_front(root, item) +void deq_push_back(root, item) deq *root; void *item; { @@ -164,15 +156,23 @@ void *item; if (root->end >= root->limit) deq_resize(root); - --root->beg; - root->beg %= root->limit; - - root->base[root->beg] = item; + root->base[root->end++] = item; + root->end %= root->limit; if (root->end == root->beg) root->end = root->limit; } +void deq_set(root, index, item) +deq *root; +int index; +void *item; +{ + if (!root || !DEQ_IN_BOUNDS(root, index)) + return; + root->base[(root->beg + index) % root->limit] = item; +} + void* deq_pop_front(root) deq *root; { @@ -222,6 +222,32 @@ int index; return deq_pop_back(root); } +void deq_swap(root, i, j) +deq *root; +int i, j; +{ + int len; + void *tmp; + + if (!root) + return; + + len = deq_size(root); + + if (i >= len || j >= len) + return; + + i += root->beg; + i %= root->limit; + + j += root->beg; + j %= root->limit; + + tmp = root->base[i]; + root->base[i] = root->base[j]; + root->base[j] = tmp; +} + void deq_remove(root, index) deq *root; int index; @@ -313,32 +339,6 @@ deq *root; return copy; } -void deq_swap(root, i, j) -deq *root; -int i, j; -{ - int len; - void *tmp; - - if (!root) - return; - - len = deq_size(root); - - if (i >= len || j >= len) - return; - - i += root->beg; - i %= root->limit; - - j += root->beg; - j %= root->limit; - - tmp = root->base[i]; - root->base[i] = root->base[j]; - root->base[j] = tmp; -} - /*Note: Does not currently reduce memory footprint*/ void deq_truncate(root, size) deq *root; diff --git a/collections/double_ended_queue.h b/collections/double_ended_queue.h index dd476af..fac2231 100644 --- a/collections/double_ended_queue.h +++ b/collections/double_ended_queue.h @@ -22,25 +22,21 @@ void deq_clear(deq*); /*data*/ void deq_push_front(deq*, void*); void deq_push_back(deq*, void*); +void deq_set(deq*, int, void*); void* deq_pop_front(deq*); void* deq_pop_back(deq*); -void deq_set(deq*, int, void*); void* deq_index(deq*, int); - void* deq_front(deq*); void* deq_back(deq*); - -void deq_swap(deq*, int, int); - void* deq_swap_rm_front(deq*, int); void* deq_swap_rm_back(deq*, int); +void deq_swap(deq*, int, int); + /*Note: Does not currently reduce memory footprint*/ void deq_truncate(deq*, int); - void deq_remove(deq*, int); - void deq_print(deq*, char* (void*)); -- cgit v1.1