aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTucker Evans <tucker@tuckerevans.com>2020-07-02 17:32:56 -0400
committerTucker Evans <tucker@tuckerevans.com>2020-07-02 19:41:22 -0400
commit0d09851c392829a6cbbd047f9a374b5c66eb4c98 (patch)
tree1bc98adad193667f60f5c918a6deaa244a89fbbc
parentbc9e78bb7e3fd57a3683e6c8a848b5769d2b21f7 (diff)
Add push for vector
-rw-r--r--collections/vector/vector.adoc17
-rw-r--r--collections/vector/vector.c14
-rw-r--r--collections/vector/vector.h1
3 files changed, 31 insertions, 1 deletions
diff --git a/collections/vector/vector.adoc b/collections/vector/vector.adoc
index b9101ca..cf001d3 100644
--- a/collections/vector/vector.adoc
+++ b/collections/vector/vector.adoc
@@ -1,7 +1,7 @@
Vector
======
Tucker Evans
-v0.1, 2020-07-01
+v0.2, 2020-07-02
A basic vector, that hold pointers to your data structures.
@@ -63,3 +63,18 @@ assert(vec_size(vector) == 0);
vec_push_back(vector, NULL);
assert(vec_size(vector) == 1);
----
+
++void vec_push(vec *self, void *item)+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Pushes +item+ into back of +self+. This may cause a resize of the internal buffer.
+
+Examples
+^^^^^^^^
+[source,c]
+----
+#include "vector.h"
+
+vec *vector = vec_new();
+vec_push(vector, NULL);
+assert(vec_size(vector) == 1);
+----
diff --git a/collections/vector/vector.c b/collections/vector/vector.c
index c2668e4..afe99de 100644
--- a/collections/vector/vector.c
+++ b/collections/vector/vector.c
@@ -61,3 +61,17 @@ vec *root;
assert(root->base);
}
+void vec_push(root, item)
+vec *root;
+void *item;
+{
+ if (!root) {
+ return;
+ }
+
+ if (root->end >= root->limit) {
+ vec_resize(root);
+ }
+
+ root->base[root->end++] = item;
+}
diff --git a/collections/vector/vector.h b/collections/vector/vector.h
index 5465108..b84217a 100644
--- a/collections/vector/vector.h
+++ b/collections/vector/vector.h
@@ -6,4 +6,5 @@ typedef struct vector vec;
vec* vec_new();
vec* vec_with_capacity(int);
int vec_size(vec*);
+void vec_push(vec*, void*);
#endif