From 5e7591a2f684bba637e120497a2ba0fdd3db8dda Mon Sep 17 00:00:00 2001 From: Kirill Petrashin Date: Sun, 29 Mar 2026 14:52:47 +0300 Subject: Make the stack dynamic --- stack.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'stack.c') diff --git a/stack.c b/stack.c index d719cb3..8b4c478 100644 --- a/stack.c +++ b/stack.c @@ -6,12 +6,17 @@ PositionStack ps_new(void) { PositionStack ps; + ps.capacity = STACK_INITIAL_CAPACITY; + ps.arr = malloc(sizeof(Position) * ps.capacity); ps.top = 0; return ps; } int ps_push(PositionStack *ps, Position pos) { - if (ps->top >= STACK_SIZE) return -1; /* FIXME: do a dynamic stack */ + if (ps->top >= ps->capacity) { + ps->capacity *= STACK_SIZE_COEFFICIENT; + if ((ps->arr = realloc(ps->arr, sizeof(Position) * ps->capacity)) == NULL) return -1; + } ps->arr[ps->top] = pos; ps->top += 1; return 0; @@ -28,3 +33,6 @@ Position ps_peek(PositionStack ps) { return ps.arr[ps.top - 1]; } +void ps_free(PositionStack ps) { + free(ps.arr); +} -- cgit v1.2.3