diff --git a/src/sfizz/FilePool.cpp b/src/sfizz/FilePool.cpp index d711e9c5..f3e73dd1 100644 --- a/src/sfizz/FilePool.cpp +++ b/src/sfizz/FilePool.cpp @@ -289,17 +289,17 @@ void sfz::FilePool::cleanupPromises() noexcept // The garbage collection cleared the data from these so we can move them // back to the empty queue auto clearedIterator = promisesToClear.begin(); - auto clearedSentinel = promisesToClear.end() - 1; - while (clearedIterator != promisesToClear.end()) { + auto clearedSentinel = promisesToClear.rbegin(); + while (clearedIterator < clearedSentinel.base()) { if (clearedIterator->get()->dataReady == false) { emptyPromises.push_back(*clearedIterator); std::iter_swap(clearedIterator, clearedSentinel); - clearedSentinel--; - promisesToClear.pop_back(); + ++clearedSentinel; } else { - clearedIterator++; + ++clearedIterator; } } + promisesToClear.resize(std::distance(promisesToClear.begin(), clearedSentinel.base())); FilePromisePtr promise; // Remove the promises from the filled queue and put them in a linear @@ -308,17 +308,17 @@ void sfz::FilePool::cleanupPromises() noexcept temporaryFilePromises.push_back(promise); auto filledIterator = temporaryFilePromises.begin(); - auto filledSentinel = temporaryFilePromises.end() - 1; - while (filledIterator != temporaryFilePromises.end()) { + auto filledSentinel = temporaryFilePromises.rbegin(); + while (filledIterator < filledSentinel.base()) { if (filledIterator->use_count() == 1) { promisesToClear.push_back(*filledIterator); std::iter_swap(filledIterator, filledSentinel); - filledSentinel--; - temporaryFilePromises.pop_back(); + ++filledSentinel; } else { - filledIterator++; + ++filledIterator; } } + temporaryFilePromises.resize(std::distance(temporaryFilePromises.begin(), filledSentinel.base())); } void sfz::FilePool::setOversamplingFactor(sfz::Oversampling factor) noexcept diff --git a/src/sfizz/Synth.cpp b/src/sfizz/Synth.cpp index 511e94c7..4d888366 100644 --- a/src/sfizz/Synth.cpp +++ b/src/sfizz/Synth.cpp @@ -237,9 +237,9 @@ bool sfz::Synth::loadSfzFile(const fs::path& filename) resources.filePool.setRootDirectory(this->originalDirectory); - auto lastRegion = regions.end() - 1; auto currentRegion = regions.begin(); - while (currentRegion <= lastRegion) { + auto lastRegion = regions.rbegin(); + while (currentRegion < lastRegion.base()) { auto region = currentRegion->get(); if (!region->isGenerator()) { @@ -247,7 +247,7 @@ bool sfz::Synth::loadSfzFile(const fs::path& filename) if (!fileInformation) { DBG("Removing the region with sample " << region->sample); std::iter_swap(currentRegion, lastRegion); - lastRegion--; + ++lastRegion; continue; } region->sampleEnd = std::min(region->sampleEnd, fileInformation->end); @@ -298,11 +298,11 @@ bool sfz::Synth::loadSfzFile(const fs::path& filename) region->registerAftertouch(0); region->registerTempo(2.0f); - currentRegion++; + ++currentRegion; } - - DBG("Removed " << regions.size() - std::distance(regions.begin(), lastRegion) - 1 << " out of " << regions.size() << " regions."); - regions.resize(std::distance(regions.begin(), lastRegion) + 1); + const auto remainingRegions = std::distance(regions.begin(), lastRegion.base()); + DBG("Removing " << (regions.size() - remainingRegions) << " out of " << regions.size() << " regions"); + regions.resize(remainingRegions); modificationTime = checkModificationTime(); return parserReturned;