From bb44eab406ae3dfb2881a6d77992cf6a8906d3b1 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Thu, 8 Aug 2024 06:47:29 +0200 Subject: [PATCH] Fixing array resize bugs --- src/basic/basic.h | 8 +-- src/text_editor/commands.cpp | 13 ++--- src/text_editor/text_editor.cpp | 4 +- src/text_editor/window.cpp | 91 +++++++++++++++++++-------------- 4 files changed, 66 insertions(+), 50 deletions(-) diff --git a/src/basic/basic.h b/src/basic/basic.h index c7708b1..bfed189 100644 --- a/src/basic/basic.h +++ b/src/basic/basic.h @@ -359,7 +359,7 @@ Slice GetSlice(Slice &arr, int64_t first_index = 0, int64_t one_past_last_ } // Make arrays resize on every item -#define ARRAY_DEBUG 1 +#define ARRAY_DEBUG 0 #if ARRAY_DEBUG #define ARRAY_IF_DEBUG_ELSE(IF, ELSE) IF #else @@ -416,7 +416,8 @@ void Reserve(Array *arr, int64_t size) { template void TryGrowing(Array *arr) { if (arr->len + 1 > arr->cap) { - int64_t new_size = ClampBottom((int64_t)16, arr->cap ARRAY_IF_DEBUG_ELSE(+1, *2)); + int64_t initial_size = (int64_t)ARRAY_IF_DEBUG_ELSE(1, 16); + int64_t new_size = ClampBottom(initial_size, arr->cap ARRAY_IF_DEBUG_ELSE(+1, *2)); Reserve(arr, new_size); } } @@ -424,7 +425,8 @@ void TryGrowing(Array *arr) { template void TryGrowing(Array *arr, int64_t item_count) { if (arr->len + item_count > arr->cap) { - int64_t new_size = ClampBottom((int64_t)16, (arr->cap + item_count) ARRAY_IF_DEBUG_ELSE(+1, *2)); + int64_t initial_size = (int64_t)ARRAY_IF_DEBUG_ELSE(1, 16); + int64_t new_size = ClampBottom(initial_size, (arr->cap + item_count) ARRAY_IF_DEBUG_ELSE(+1, *2)); Reserve(arr, new_size); } } diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index dae2aa0..fb9a60b 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -80,9 +80,8 @@ void ToggleFullscreen() { } void ToggleConsole() { - Window *window = GetWindow(ConsoleWindowID); - if (ToggleVisibility(window)) { - SetActiveWindow(window->id); + if (ToggleVisibility(ConsoleWindowID)) { + SetActiveWindow(ConsoleWindowID); } else { SetActiveWindow(GetLastActiveWindow()); } @@ -392,8 +391,7 @@ bool GlobalCommand(Event event) { } if (Ctrl(SDLK_0)) { - Window *window = GetWindow(DebugWindowID); - ToggleVisibility(window); + ToggleVisibility(DebugWindowID); } if (Press(SDLK_F5)) { @@ -512,7 +510,6 @@ void ReportWarningf(const char *fmt, ...) { STRING_FORMAT(scratch, fmt, string); String16 string16 = ToString16(scratch, string); AppendToConsole(string16); - Window *window = GetWindow(ConsoleWindowID); - SetVisibility(window, true); - SetActiveWindow(window->id); + SetVisibility(ConsoleWindowID, true); + SetActiveWindow(ConsoleWindowID); } \ No newline at end of file diff --git a/src/text_editor/text_editor.cpp b/src/text_editor/text_editor.cpp index a9fdc19..ba746c3 100644 --- a/src/text_editor/text_editor.cpp +++ b/src/text_editor/text_editor.cpp @@ -176,9 +176,9 @@ void Update(Event event) { bool title_bar_is_active = ActiveWindow == window->title_bar_window; bool is_active = IsActive(window); if (is_active || title_bar_is_active) { - SetVisibility(window, true); + SetVisibility(window->id, true); } else { - SetVisibility(window, false); + SetVisibility(window->id, false); } } if (!window->visible) continue; diff --git a/src/text_editor/window.cpp b/src/text_editor/window.cpp index c78674b..40dd5a9 100644 --- a/src/text_editor/window.cpp +++ b/src/text_editor/window.cpp @@ -95,7 +95,8 @@ void AddRowWindow() { Insert(&Windows, window_copy, active_window_index + 1); } -void SetVisibility(Window *window, bool v) { +void SetVisibility(WindowID window_id, bool v) { + Window *window = GetWindow(window_id); window->visible = v; if (window->title_bar_window.id != 0) { @@ -104,9 +105,10 @@ void SetVisibility(Window *window, bool v) { } } -bool ToggleVisibility(Window *window) { - bool visible = !window->visible; - SetVisibility(window, visible); +bool ToggleVisibility(WindowID window_id) { + Window *window = GetWindow(window_id); + bool visible = !window->visible; + SetVisibility(window_id, visible); return visible; } @@ -123,10 +125,16 @@ void InitScratchBuffer() { void InitWindows() { Allocator sys_allocator = Perm; +#if !ARRAY_DEBUG + Reserve(&Windows, 64); + Reserve(&Buffers, 256); + Reserve(&Views, 256); +#endif { - Window *window = CreateWindow(); - window->is_column = true; + Window *window = CreateWindow(); + WindowID window_id = window->id; + window->is_column = true; // window->draw_line_numbers = false; Buffer *buffer = CreateBuffer(sys_allocator, BuffCWD("*load_text_a*")); View *view = CreateView(buffer->id); @@ -134,48 +142,56 @@ void InitWindows() { LoadUnicode(buffer); // LoadBigTextAndBigLine(buffer, 10000000); window->active_view = view->id; - CreateTitlebar(window->id); + CreateTitlebar(window_id); } { - Window *window = CreateWindow(); + Window *window = CreateWindow(); + WindowID window_id = window->id; + ConsoleWindowID = window_id; + window->absolute_position = true; window->dont_save_in_active_window_history = true; - Buffer *buffer = CreateBuffer(sys_allocator, BuffCWD("*console*")); + Buffer *buffer = CreateBuffer(sys_allocator, BuffCWD("*console*")); + ConsoleBufferID = buffer->id; // buffer->no_history = true; + View *view = CreateView(buffer->id); window->active_view = view->id; - CreateTitlebar(window->id); - SetVisibility(window, false); - - ConsoleWindowID = window->id; - ConsoleBufferID = buffer->id; + CreateTitlebar(window_id); + SetVisibility(window_id, false); } { - Window *window = CreateWindow(); + Window *window = CreateWindow(); + WindowID window_id = window->id; + DebugWindowID = window->id; window->draw_line_numbers = false; - Buffer *buffer = CreateBuffer(sys_allocator, BuffCWD("*debug*")); window->absolute_position = true; window->draw_line_numbers = false; window->draw_scrollbar = false; window->dont_save_in_active_window_history = true; window->visible = false; - buffer->no_history = true; - View *view = CreateView(buffer->id); window->z = 2; - window->active_view = view->id; - Window *titlebar = CreateTitlebar(window->id); - titlebar->z = 2; - SetVisibility(window, false); - DebugWindowID = window->id; - DebugBufferID = buffer->id; + + Buffer *buffer = CreateBuffer(sys_allocator, BuffCWD("*debug*")); + DebugBufferID = buffer->id; + buffer->no_history = true; + + View *view = CreateView(buffer->id); + window->active_view = view->id; + + Window *titlebar = CreateTitlebar(window_id); + titlebar->z = 2; + + SetVisibility(window_id, false); } { - Window *w = CreateWindow(); + Window *w = CreateWindow(); + WindowID window_id = w->id; w->draw_scrollbar = false; w->draw_line_numbers = false; w->visible = false; @@ -190,15 +206,16 @@ void InitWindows() { w->active_view = v->id; w->z = 1; - Window *titlebar = CreateTitlebar(w->id); + Window *titlebar = CreateTitlebar(window_id); titlebar->z = 1; - SetVisibility(w, false); + SetVisibility(window_id, false); - CommandWindowID = w->id; + CommandWindowID = window_id; } { - Window *w = CreateWindow(); + Window *w = CreateWindow(); + WindowID window_id = w->id; w->draw_scrollbar = false; w->draw_line_numbers = false; w->visible = false; @@ -210,15 +227,17 @@ void InitWindows() { View *v = CreateView(b->id); w->active_view = v->id; - CreateTitlebar(w->id); - SetVisibility(w, false); + CreateTitlebar(window_id); + SetVisibility(window_id, false); SearchBufferID = b->id; - SearchWindowID = w->id; + SearchWindowID = window_id; } { - Window *w = CreateWindow(); + Window *w = CreateWindow(); + WindowID window_id = w->id; + PopupWindowID = window_id; w->draw_scrollbar = false; w->draw_line_numbers = false; w->visible = false; @@ -232,11 +251,9 @@ void InitWindows() { View *v = CreateView(b->id); w->active_view = v->id; - Window *infobar = CreateTitlebar(w->id); + Window *infobar = CreateTitlebar(window_id); infobar->z = 2; - SetVisibility(w, false); - - PopupWindowID = w->id; + SetVisibility(window_id, false); } SetActiveWindow({0});