Skip to content

Commit

Permalink
array: add helper functions for LIFO usage
Browse files Browse the repository at this point in the history
  • Loading branch information
martanne committed Jul 10, 2017
1 parent 19a5d3c commit 6e0532a
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
18 changes: 18 additions & 0 deletions array.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
21 changes: 21 additions & 0 deletions array.h
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit 6e0532a

Please sign in to comment.