From 81b75d9f55cc5ec151eb37655e869d90cbd52262 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sun, 11 Jul 2010 03:31:33 +0000 Subject: [PATCH] Significantly speed up AssLimitToVisibleFilter::ProcessSubs Originally committed to SVN as r4673. --- aegisub/src/export_visible_lines.cpp | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/aegisub/src/export_visible_lines.cpp b/aegisub/src/export_visible_lines.cpp index d0837b3d9..7b6258d42 100644 --- a/aegisub/src/export_visible_lines.cpp +++ b/aegisub/src/export_visible_lines.cpp @@ -61,23 +61,19 @@ void AssLimitToVisibleFilter::Init() { /// @brief Process /// @param subs /// @param export_dialog -void AssLimitToVisibleFilter::ProcessSubs(AssFile *subs, wxWindow *export_dialog) { +void AssLimitToVisibleFilter::ProcessSubs(AssFile *subs, wxWindow *) { if (frame == -1) return; - AssDialogue *diag; - entryIter cur, next = subs->Line.begin(); - while (next != subs->Line.end()) { - cur = next++; + int time = VideoContext::Get()->TimeAtFrame(frame); - diag = dynamic_cast(*cur); - if (diag) { - // Invisible, remove frame - if (VideoContext::Get()->FrameAtTime(diag->Start.GetMS(),agi::vfr::START) > frame || - VideoContext::Get()->FrameAtTime(diag->End.GetMS(),agi::vfr::END) < frame) { - - delete *cur; - subs->Line.erase(cur); - } + for (entryIter cur = subs->Line.begin(); cur != subs->Line.end(); ) { + AssDialogue *diag = dynamic_cast(*cur); + if (diag && (diag->Start.GetMS() > time || diag->End.GetMS() <= time)) { + delete *cur; + cur = subs->Line.erase(cur); + } + else { + ++cur; } } }