aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--array.c18
-rw-r--r--array.h21
2 files changed, 39 insertions, 0 deletions
diff --git a/array.c b/array.c
index b65ad12..824154a 100644
--- a/array.c
+++ b/array.c
@@ -151,3 +151,21 @@ bool array_resize(Array *arr, size_t len) {
void array_sort(Array *arr, int (*compar)(const void*, const void*)) {
qsort(arr->items, arr->len, arr->elem_size, compar);
}
+
+bool array_push(Array *arr, void *item) {
+ return array_add(arr, item);
+}
+
+void *array_pop(Array *arr) {
+ void *item = array_peek(arr);
+ if (!item)
+ return NULL;
+ arr->len--;
+ return item;
+}
+
+void *array_peek(Array *arr) {
+ if (arr->len == 0)
+ return NULL;
+ return array_get(arr, arr->len - 1);
+}
diff --git a/array.h b/array.h
index 80b3619..d55af28 100644
--- a/array.h
+++ b/array.h
@@ -108,5 +108,26 @@ bool array_resize(Array*, size_t length);
* Sort array, the comparision function works as for `qsort(3)`.
*/
void array_sort(Array*, int (*compar)(const void*, const void*));
+/**
+ * Push item onto the top of the stack.
+ * @rst
+ * .. note:: Is equivalent to ``array_add(arr, item)``.
+ * @endrst
+ */
+bool array_push(Array*, void *item);
+/**
+ * Get and remove item at the top of the stack.
+ * @rst
+ * .. warning:: The same ownership rules as for ``array_get`` apply.
+ * @endrst
+ */
+void *array_pop(Array*);
+/**
+ * Get item at the top of the stack without removing it.
+ * @rst
+ * .. warning:: The same ownership rules as for ``array_get`` apply.
+ * @endrst
+ */
+void *array_peek(Array*);
#endif