33 lines
803 B
C
33 lines
803 B
C
|
#include "stack.h"
|
||
|
|
||
|
#include <stdint.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
|
||
|
void stack_init(struct Stack* stack, size_t size) {
|
||
|
stack->size = 0;
|
||
|
stack->capacity = size;
|
||
|
stack->data = malloc(size);
|
||
|
}
|
||
|
|
||
|
void stack_push(struct Stack* stack, void* data, size_t len) {
|
||
|
size_t new_size = stack->size + len;
|
||
|
if (new_size >= stack->capacity) {
|
||
|
stack->capacity = new_size * 2;
|
||
|
stack->data = realloc(stack->data, stack->capacity);
|
||
|
}
|
||
|
memcpy((uint8_t*)stack->data + stack->size, data, len);
|
||
|
stack->size += len;
|
||
|
}
|
||
|
|
||
|
void* stack_pop(struct Stack* stack, size_t len) {
|
||
|
if (stack->size < len) return NULL;
|
||
|
stack->size -= len;
|
||
|
return (uint8_t*)stack->data + stack->size;
|
||
|
}
|
||
|
|
||
|
void stack_free(struct Stack *stack) {
|
||
|
free(stack->data);
|
||
|
}
|