Optimize report deletion

develop
Ryan Williams 2022-06-07 04:21:48 -07:00 committed by GitHub
parent 5d08e5ae67
commit a7267e3c4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 6 deletions

@ -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);
}
}