From 709879ee56d31fe543a0ad882713bd4e3d17d2d2 Mon Sep 17 00:00:00 2001 From: dam Date: Thu, 17 Aug 2023 20:28:47 +0100 Subject: Added kscurses and testing program. --- kscurses/queue.jai | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 kscurses/queue.jai (limited to 'kscurses/queue.jai') diff --git a/kscurses/queue.jai b/kscurses/queue.jai new file mode 100644 index 0000000..86f5dc8 --- /dev/null +++ b/kscurses/queue.jai @@ -0,0 +1,57 @@ +Queue :: struct(Element_Type : Type) { + buffer : []Element_Type; + begin, count := 0; +} +pop :: (using queue : *Queue($Element_Type)) -> Element_Type, bool { + elem : Element_Type; + ok := true; + if count { + elem = buffer[begin]; + begin += 1; + count -= 1; + } else { + ok = false; + } + return elem, ok; +} +get_space :: (using queue : *Queue($Element_Type), new_elements_count : int) { + if begin + count + new_elements_count <= buffer.count return; + if count <= begin && count + new_elements_count <= buffer.count { + memcpy(buffer.data, buffer.data + begin, size_of(Element_Type) * count); + begin = 0; + } else { + new_buf := NewArray(count + max(new_elements_count, count), Element_Type); + memcpy(new_buf.data, buffer.data + begin, count * size_of(Element_Type)); + begin = 0; + array_free(buffer); + buffer = new_buf; + } +} +push :: (using queue : *Queue($Element_Type), element : Element_Type) { + get_space(queue, 1); + assert(begin + count + 1 <= buffer.count); + buffer[begin + count] = element; + count += 1; +} +deinit :: (using queue : *Queue($Element_Type)) { + array_free(buffer); + < Element_Type, bool { + result : Element_Type; + if queue.count > 0 then result = queue.buffer[queue.begin]; + return result, queue.count > 0; +} +last :: (using queue : Queue($Element_Type)) -> Element_Type, bool { + result : Element_Type; + if queue.count > 0 then result = queue.buffer[queue.begin + queue.count - 1]; + return result, queue.count > 0; +} -- cgit v1.2.3