BLI_stack: BLI_stack_pop_n_reverse

Useful to fill an array in the order its added.
This commit is contained in:
Campbell Barton 2015-06-19 17:40:35 +10:00
parent d4aeec9204
commit 52e95ad3d3
2 changed files with 18 additions and 0 deletions

View File

@ -44,6 +44,7 @@ void *BLI_stack_push_r(BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
void BLI_stack_push(BLI_Stack *stack, const void *src) ATTR_NONNULL();
void BLI_stack_pop_n(BLI_Stack *stack, void *dst, unsigned int n) ATTR_NONNULL();
void BLI_stack_pop_n_reverse(BLI_Stack *stack, void *dst, unsigned int n) ATTR_NONNULL();
void BLI_stack_pop(BLI_Stack *stack, void *dst) ATTR_NONNULL();
void *BLI_stack_peek(BLI_Stack *stack) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();

View File

@ -208,6 +208,23 @@ void BLI_stack_pop_n(BLI_Stack *stack, void *dst, unsigned int n)
}
}
/**
* A version of #BLI_stack_pop_n which which fills in an array (in the reverse order).
*
* \note The first item in the array will be first item added to the stack.
*/
void BLI_stack_pop_n_reverse(BLI_Stack *stack, void *dst, unsigned int n)
{
BLI_assert(n <= BLI_stack_count(stack));
dst = (void *)((char *)dst + (stack->elem_size * n));
while (n--) {
dst = (void *)((char *)dst - stack->elem_size);
BLI_stack_pop(stack, dst);
}
}
void *BLI_stack_peek(BLI_Stack *stack)
{
BLI_assert(BLI_stack_is_empty(stack) == false);