From a7267e3c4ecfddae81447e5748d3ba4ed88b4b70 Mon Sep 17 00:00:00 2001 From: Ryan Williams Date: Tue, 7 Jun 2022 04:21:48 -0700 Subject: [PATCH] Optimize report deletion --- library/modules/Gui.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/library/modules/Gui.cpp b/library/modules/Gui.cpp index 8bc5a7473..82da223ea 100644 --- a/library/modules/Gui.cpp +++ b/library/modules/Gui.cpp @@ -1415,15 +1415,19 @@ static bool recent_report_any(df::unit *unit) static void delete_old_reports() { auto &reports = world->status.reports; - while (reports.size() > MAX_REPORTS_SIZE) + if (reports.size() > MAX_REPORTS_SIZE) { - if (reports[0] != NULL) + size_t excess = reports.size() - MAX_REPORTS_SIZE; + for (size_t i = 0; i < excess; i++) { - if (reports[0]->flags.bits.announcement) - erase_from_vector(world->status.announcements, &df::report::id, reports[0]->id); - delete reports[0]; + if (reports[i] != NULL) + { // report destructor + if (reports[i]->flags.bits.announcement) + erase_from_vector(world->status.announcements, &df::report::id, reports[i]->id); + delete reports[i]; + } } - reports.erase(reports.begin()); + reports.erase(reports.begin(), reports.begin() + excess); } }