From a574d6ac67c78b7dcaed5aa66a4c5e7658782b1e Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Thu, 12 Jun 2014 10:31:49 -0700 Subject: [PATCH] Speed up AsyncVideoProvider::UpdateSubtitles a bit Adding Row to AssDialogue removes the need to loop over the file to find out what rows changed. --- src/async_video_provider.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/async_video_provider.cpp b/src/async_video_provider.cpp index d1b6fbce9..1b8582552 100644 --- a/src/async_video_provider.cpp +++ b/src/async_video_provider.cpp @@ -107,21 +107,17 @@ void AsyncVideoProvider::UpdateSubtitles(const AssFile *new_subs, std::set> changed; - size_t i = 0; - for (auto const& e : new_subs->Events) { - if (changes.count(&e)) - changed.emplace_back(i, new AssDialogue(e)); - ++i; - } + std::vector changed; + for (auto d : changes) + changed.push_back(new AssDialogue(*d)); worker->Async([=]{ - size_t i = 0; + int i = 0; auto it = subs->Events.begin(); for (auto& update : changed) { - std::advance(it, update.first - i); - i = update.first; - subs->Events.insert(it, *update.second); + std::advance(it, update->Row - i); + i = update->Row; + subs->Events.insert(it, *update); delete &*it--; }