summaryrefslogtreecommitdiff
path: root/rushs/evalexpr/vector/vector.h
diff options
context:
space:
mode:
Diffstat (limited to 'rushs/evalexpr/vector/vector.h')
-rw-r--r--rushs/evalexpr/vector/vector.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/rushs/evalexpr/vector/vector.h b/rushs/evalexpr/vector/vector.h
new file mode 100644
index 0000000..5afada7
--- /dev/null
+++ b/rushs/evalexpr/vector/vector.h
@@ -0,0 +1,64 @@
+#ifndef VECTOR_H
+#define VECTOR_H
+
+#include <stddef.h>
+
+struct vector
+{
+ // The number of elements in the vector
+ size_t size;
+ // The maximum number of elements in the vector
+ size_t capacity;
+ // The elements themselves
+ int *data;
+};
+
+/*
+** Initialize the vector with `n` capacity.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_init(size_t n);
+
+/*
+** Release the memory used by the vector.
+** Does nothing if `v` is `NULL`.
+*/
+void vector_destroy(struct vector *v);
+
+/*
+** Resize the vector to `n` capacity.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_resize(struct vector *v, size_t n);
+
+/*
+** Append an element to the end of the vector. Expand the vector if needed.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_append(struct vector *v, int elt);
+
+/*
+** Display the vector contents on `stdout`.
+** Displays `\n` if `v` is `NULL`.
+*/
+void vector_print(const struct vector *v);
+
+/*
+** Remove all the elements of the vector, and resize it to `n` capacity.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_reset(struct vector *v, size_t n);
+
+/*
+** Insert `n` at the index `i`. Expand the vector if needed.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_insert(struct vector *v, size_t i, int elt);
+
+/*
+** Remove the element at the index `i`.
+** Returns `NULL` if an error occured.
+*/
+struct vector *vector_remove(struct vector *v, size_t i);
+
+#endif /* !VECTOR_H */