/*
* Copyright (c) 2014, cPanel, Inc.
* All rights reserved.
* http://cpanel.net/
*
* This is free software; you can redistribute it and/or modify it under the
* same terms as Perl itself. See the Perl manual section 'perlartistic' for
* further information.
*/
#ifndef _B_STACK_H
#define _B_STACK_H
#include <sys/types.h>
#define B_STACK_DEFAULT_GROWTH_FACTOR 128
#define B_STACK_DESTRUCTOR(ds) ((void (*)(void *))ds)
typedef struct _b_stack {
size_t size;
size_t count;
size_t growth_factor;
void ** items;
void (*destructor)(void *);
} b_stack;
b_stack * b_stack_new(size_t grow_by);
void b_stack_set_destructor(b_stack *stack, void (*destructor)(void *));
void * b_stack_push(b_stack *stack, void *item);
void * b_stack_pop(b_stack *stack);
void * b_stack_shift(b_stack *stack);
void * b_stack_top(b_stack *stack);
void * b_stack_item_at(b_stack *stack, size_t index);
size_t b_stack_count(b_stack *stack);
b_stack * b_stack_reverse(b_stack *stack);
void b_stack_destroy(b_stack *stack);
#endif /* _B_STACK_H */