From fcbe7f388f8a1ade80b2a41a417d719d2cb03501 Mon Sep 17 00:00:00 2001 From: cassowarii <2374677+cassowarii@users.noreply.github.com> Date: Sun, 21 Jun 2026 10:21:39 -0700 Subject: [PATCH] forgot to include this file! --- src/parse/token.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/parse/token.c diff --git a/src/parse/token.c b/src/parse/token.c new file mode 100644 index 0000000..7d8be9e --- /dev/null +++ b/src/parse/token.c @@ -0,0 +1,49 @@ +#include "token.h" + +void sbTokenQueue_initialize(hTokenQueue q, i16 initial_count) { + sbBuffer_initialize(&q->buffer, initial_count * sizeof(sbLexToken)); +} + +void sbTokenQueue_enqueue(hTokenQueue q, sbLexToken t) { + sbLexToken *where = sbBuffer_expand(&q->buffer, sizeof(sbLexToken)); + + *where = t; +} + +i32 sbTokenQueue_size(hTokenQueue q) { + return q->buffer.size / sizeof(sbLexToken); +} + +sbLexToken sbTokenQueue_shift(hTokenQueue q) { + i32 size = sbTokenQueue_size(q); + + sbLexToken *token_list = (sbLexToken*)q->buffer.data; + + /* copy first entry */ + sbLexToken result = token_list[0]; + + /* move everything down one */ + for (int i = 0; i < size - 1; i++) { + token_list[i] = token_list[i + 1]; + } + + sbBuffer_shrink(&q->buffer, sizeof(sbLexToken)); + + return result; +} + +sbLexToken sbTokenQueue_at(hTokenQueue q, i32 index) { + i32 size = sbTokenQueue_size(q); + + if (index >= size) { + return (sbLexToken) {0}; + } + + sbLexToken *token_list = (sbLexToken*)q->buffer.data; + + return token_list[index]; +} + +void sbTokenQueue_deinitialize(hTokenQueue q) { + sbBuffer_deinitialize(&q->buffer); +} -- 1.8.3.1