From 98bd1cc78cac7d66ef5e41b5be9b9e53606b35aa Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 2 Aug 2020 14:29:45 +0200 Subject: [PATCH] small build segment tool improvement --- tools/build_segment.cc | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/tools/build_segment.cc b/tools/build_segment.cc index d160f055..ab6c41ed 100644 --- a/tools/build_segment.cc +++ b/tools/build_segment.cc @@ -874,10 +874,26 @@ void BinningProblem::placeHighRoutines(DualStream &logOutput) while (!floatingRoutines.empty()) { - // Try to find any high routine + // Find the largest high routine - auto iterRoutine = floatingRoutines.begin(); - while (iterRoutine != floatingRoutines.end() && !(*iterRoutine)->high) iterRoutine++; + auto iterRoutine = floatingRoutines.end(); + + for (auto iter = floatingRoutines.begin(); iter < floatingRoutines.end(); iter++) + { + if (!(*iter)->high) continue; + + if (iterRoutine == floatingRoutines.end() || + (*iterRoutine)->codeLength < (*iter)->codeLength) + { + iterRoutine = iter; + continue; + } + + if ((*iterRoutine)->codeLength < (*iter)->codeLength) + { + iterRoutine = iter; + } + } if (iterRoutine == floatingRoutines.end()) break;