diff --git a/src/basic/basic.h b/src/basic/basic.h index d8bf62c..53aee81 100644 --- a/src/basic/basic.h +++ b/src/basic/basic.h @@ -694,6 +694,46 @@ ReverseIter IterateInReverse(Slice *slice) { return {slice->end() - 1, slice}; } +template +struct CircularArray { + Allocator allocator; + T *data; + int16_t cap; + int16_t write; + int16_t buffer_is_full; +}; + +template +CircularArray MakeCircularArray(Allocator allocator, int size) { + CircularArray arr = {allocator}; + arr.data = AllocArray(allocator, T, size); + arr.cap = size; + return arr; +} + +template +void Add(CircularArray *arr, T item) { + int idx = arr->write; + arr->write = (arr->write + 1) % arr->cap; + if (arr->write == 0) arr->buffer_is_full = 1; + arr->data[idx] = item; +} + +template +T Get(CircularArray *arr, int idx, T default_value) { + if (idx >= arr->cap) return default_value; + int i = arr->write - 1 - idx; + if (i < 0 && arr->buffer_is_full) { + i = arr->cap + i; + } + + if (i >= 0 && i < arr->cap) { + return arr->data[i]; + } else { + return default_value; + } +} + struct UTF32Result { uint32_t out_str; int64_t advance; diff --git a/src/text_editor/commands_window.cpp b/src/text_editor/commands_window.cpp index 9ef6e89..06b3991 100644 --- a/src/text_editor/commands_window.cpp +++ b/src/text_editor/commands_window.cpp @@ -260,6 +260,7 @@ void ReplaceDebugData() { String view_list = DebugViewList(scratch); Append(buffer, ToString16(scratch, view_list)); + Append(buffer, L"\n"); String window_list = DebugWindowList(scratch); Append(buffer, ToString16(scratch, window_list));