From: cassowarii <2374677+cassowarii@users.noreply.github.com> Date: Sun, 21 Jun 2026 17:21:39 +0000 (-0700) Subject: forgot to include this file! X-Git-Url: https://git.cassowary.me/gitweb.cgi?a=commitdiff_plain;h=fcbe7f388f8a1ade80b2a41a417d719d2cb03501;p=sarabande.git forgot to include this file! --- 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); +}