/** * @file stack.h * @author Piotr Krygier (everyonecancode@gmail.com) * @brief * @version 0.1 * @date 2024-05-01 * * @copyright Copyright (c) 2024 * */ #ifndef STACK_H #define STACK_H #define RSE_STACK_DEFINE(name, type, size) \ struct name { \ type data[size]; \ int top; \ } #define RSE_STACK_PUSH(stack, value) \ stack.data[++stack.top] = value #define RSE_STACK_POP(stack) \ stack.data[stack.top--] #define RSE_STACK_TOP(stack) \ stack.data[stack.top] #define RSE_STACK_IS_EMPTY(stack) \ (stack.top == -1) #define RSE_STACK_IS_FULL(stack, size) \ (stack.top == size - 1) #define RSE_STACK_INIT(stack) \ (stack.top = -1) #define RSE_STACK_SIZE(stack) \ (stack.top + 1) #define RSE_STACK_CLEAR(stack) \ (stack.top = -1) #endif // STACK_H