From 5e2206f45f74da1aa793a03152dae78748ec6346 Mon Sep 17 00:00:00 2001 From: cancel Date: Fri, 7 Dec 2018 17:48:50 +0900 Subject: [PATCH] Change to use scratch oevent list when predicting ui markers --- bank.c | 10 ++++++++++ bank.h | 1 + tui_main.c | 8 +++++--- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/bank.c b/bank.c index f941644..c7bd4ce 100644 --- a/bank.c +++ b/bank.c @@ -104,6 +104,16 @@ void oevent_list_init(Oevent_list* olist) { } void oevent_list_deinit(Oevent_list* olist) { free(olist->buffer); } void oevent_list_clear(Oevent_list* olist) { olist->count = 0; } +void oevent_list_copy(Oevent_list const* src, Oevent_list* dest) { + Usz src_count = src->count; + if (dest->capacity < src_count) { + Usz new_cap = orca_round_up_power2(src_count); + dest->buffer = realloc(dest->buffer, new_cap * sizeof(Oevent)); + dest->capacity = new_cap; + } + memcpy(dest->buffer, src->buffer, src_count * sizeof(Oevent)); + dest->count = src_count; +} Oevent* oevent_list_alloc_item(Oevent_list* olist) { Usz count = olist->count; if (olist->capacity == count) { diff --git a/bank.h b/bank.h index e08779f..e2af3df 100644 --- a/bank.h +++ b/bank.h @@ -59,5 +59,6 @@ typedef struct { void oevent_list_init(Oevent_list* olist); void oevent_list_deinit(Oevent_list* olist); void oevent_list_clear(Oevent_list* olist); +void oevent_list_copy(Oevent_list const* src, Oevent_list* dest); ORCA_FORCE_NO_INLINE Oevent* oevent_list_alloc_item(Oevent_list* olist); diff --git a/tui_main.c b/tui_main.c index 971dce0..b7ef007 100644 --- a/tui_main.c +++ b/tui_main.c @@ -588,6 +588,8 @@ int main(int argc, char** argv) { Field scratch_field; field_init(&scratch_field); + Oevent_list scratch_oevent_list; + oevent_list_init(&scratch_oevent_list); Tui_cursor tui_cursor; tui_cursor_init(&tui_cursor); @@ -619,9 +621,8 @@ int main(int argc, char** argv) { if (needs_remarking) { field_resize_raw_if_necessary(&scratch_field, field.height, field.width); field_copy(&field, &scratch_field); - orca_run(field.buffer, markmap_r.buffer, field.height, field.width, - tick_num, &bank, &oevent_list, piano_bits); - field_copy(&scratch_field, &field); + orca_run(scratch_field.buffer, markmap_r.buffer, field.height, field.width, + tick_num, &bank, &scratch_oevent_list, piano_bits); needs_remarking = false; } int content_y = 0; @@ -826,5 +827,6 @@ quit: field_deinit(&scratch_field); undo_history_deinit(&undo_hist); oevent_list_deinit(&oevent_list); + oevent_list_deinit(&scratch_oevent_list); return 0; }