forgot to include this file!
authorcassowarii <2374677+cassowarii@users.noreply.github.com>
Sun, 21 Jun 2026 17:21:39 +0000 (10:21 -0700)
committercassowarii <2374677+cassowarii@users.noreply.github.com>
Sun, 21 Jun 2026 17:21:39 +0000 (10:21 -0700)
src/parse/token.c [new file with mode: 0644]

diff --git a/src/parse/token.c b/src/parse/token.c
new file mode 100644 (file)
index 0000000..7d8be9e
--- /dev/null
@@ -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);
+}