X-Git-Url: https://git.auder.net/doc/index.css?a=blobdiff_plain;f=src%2FStack.h;h=24ad176acd03535457d7b9dc14675a627bf6bb36;hb=1ff641f9960fa6c6081817a5641afb22fad91dcd;hp=d2461077aee742d5346511ce3c847f0ab0dfe4dd;hpb=a78687686f5b490d99fae21f9fa8aaa9a34f1812;p=cgds.git diff --git a/src/Stack.h b/src/Stack.h index d246107..24ad176 100644 --- a/src/Stack.h +++ b/src/Stack.h @@ -9,22 +9,14 @@ #include #include "cgds/types.h" #include "cgds/safe_alloc.h" - -/** - * @brief Generic internal stack cell. - */ -typedef struct StackCell { - void* data; ///< Generic data contained in the cell. - struct StackCell* previous; ///< Previous cell in the internal single-linked list. -} StackCell; +#include "cgds/Vector.h" /** * @brief Stack containing generic data. */ typedef struct Stack { - UInt size; ///< Count elements in the stack. size_t dataSize; ///< Size in bytes of a stack element. - StackCell* top; ///< Last added element, on top of the stack. + Vector* array; ///< Internal data structure: resizeable array. } Stack; /** @@ -35,24 +27,24 @@ void _stack_init( size_t dataSize ///< Size in bytes of a stack element. ); -/** +/** * @brief Return an allocated and initialized stack. */ Stack* _stack_new( size_t dataSize ///< Size in bytes of a stack element. ); -/** +/** * @brief Return an allocated and initialized stack. * @param type Type of a stack element (int, char*, ...). - * + * * Usage: Stack* stack_new( type) */ #define stack_new(type) \ _stack_new(sizeof(type)) /** - * @brief Copy constructor (works well if items do not have allocated sub-pointers). + * @brief Copy constructor (shallow copy, ok for basic types). */ Stack* stack_copy( Stack* stack ///< "this" pointer. @@ -61,7 +53,7 @@ Stack* stack_copy( /** * @brief Check if the stack is empty. */ -Bool stack_empty( +bool stack_empty( Stack* stack ///< "this" pointer. ); @@ -84,7 +76,7 @@ void _stack_push( * @brief Add something on top of the stack. * @param stack "this" pointer. * @param data Data to be added. - * + * * Usage: void stack_push(Stack* stack, void data) */ #define stack_push(stack, data) \ @@ -104,7 +96,7 @@ void* _stack_top( * @brief Return what is on top of the stack. * @param stack "this" pointer. * @param data Data to be assigned. - * + * * Usage: void stack_top(Stack* stack, void data) */ #define stack_top(stack, data) \