From 7a5d9de1dbbf8a0883bf4c72336ddb9a7538c357 Mon Sep 17 00:00:00 2001 From: Erica Fischer Date: Thu, 1 Feb 2024 12:09:00 -0800 Subject: [PATCH] Do less work when the tilestats sample values list is already full --- mbtiles.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/mbtiles.cpp b/mbtiles.cpp index 6788d73a..f24c91dd 100644 --- a/mbtiles.cpp +++ b/mbtiles.cpp @@ -930,10 +930,17 @@ void add_to_tilestats(std::map &tilestats, std::string co auto pt = std::lower_bound(tsa->second.sample_values.begin(), tsa->second.sample_values.end(), val); if (pt == tsa->second.sample_values.end() || *pt != val) { // not found - tsa->second.sample_values.insert(pt, val); - - if (tsa->second.sample_values.size() > max_tilestats_sample_values) { - tsa->second.sample_values.pop_back(); + if (tsa->second.sample_values.size() >= max_tilestats_sample_values) { + if (pt == tsa->second.sample_values.end()) { + // insertion point would be at the end, + // and the list is already full, so do nothing + } else { + // bump the former last value, insert this one + tsa->second.sample_values.insert(pt, val); + tsa->second.sample_values.pop_back(); + } + } else { + tsa->second.sample_values.insert(pt, val); } }