From d8bd9904d86d6d70db769aa6b10451f7fed6d247 Mon Sep 17 00:00:00 2001 From: Thomas Goyne Date: Sat, 3 Jan 2015 14:56:20 -0800 Subject: [PATCH] Avoid running the extradata parsing regex unnecessarily --- src/ass_dialogue.cpp | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/ass_dialogue.cpp b/src/ass_dialogue.cpp index e3bc1773c..f37062f1e 100644 --- a/src/ass_dialogue.cpp +++ b/src/ass_dialogue.cpp @@ -123,22 +123,24 @@ void AssDialogue::Parse(std::string const& raw) { std::string text{tkn.next_tok().begin(), str.end()}; - static const boost::regex extradata_test("^\\{(=\\d+)+\\}"); - boost::match_results rematch; - if (boost::regex_search(text.begin(), text.end(), rematch, extradata_test)) { - std::string extradata_str = rematch.str(0); - text = rematch.suffix().str(); + if (text.size() > 1 && text[0] == '{' && text[1] == '=') { + static const boost::regex extradata_test("^\\{(=\\d+)+\\}"); + boost::match_results rematch; + if (boost::regex_search(text.begin(), text.end(), rematch, extradata_test)) { + std::string extradata_str = rematch.str(0); + text = rematch.suffix().str(); - static const boost::regex idmatcher("=(\\d+)"); - auto start = extradata_str.begin(); - auto end = extradata_str.end(); - std::vector ids; - while (boost::regex_search(start, end, rematch, idmatcher)) { - auto id = boost::lexical_cast(rematch.str(1)); - ids.push_back(id); - start = rematch.suffix().first; + static const boost::regex idmatcher("=(\\d+)"); + auto start = extradata_str.begin(); + auto end = extradata_str.end(); + std::vector ids; + while (boost::regex_search(start, end, rematch, idmatcher)) { + auto id = boost::lexical_cast(rematch.str(1)); + ids.push_back(id); + start = rematch.suffix().first; + } + ExtradataIds = ids; } - ExtradataIds = ids; } Text = text;