aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTucker Evans <tucker@tuckerevans.com>2020-06-10 23:23:52 -0400
committerTucker Evans <tucker@tuckerevans.com>2020-06-10 23:46:26 -0400
commit0f7085dedd2f60f2ccc0b1f49558f5be89de97b2 (patch)
tree297ebffad3e49909bc2c7baa63d0f5046abb0203
parentfcf2831e9151e87f3feed9827ce56a39c9256804 (diff)
Fix change order of functions in double ended queue.
Groups functions that return items together.
-rw-r--r--collections/double_ended_queue.adoc32
-rw-r--r--collections/double_ended_queue.c88
-rw-r--r--collections/double_ended_queue.h10
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*));