From 77c90a08e83a28dbeb9eccf728ed0ef20775450a Mon Sep 17 00:00:00 2001 From: Jesse Beder Date: Sat, 24 Jan 2015 16:29:57 -0600 Subject: [PATCH] Refactor plain scalar validation in the emitter to precompute the invalid regexes --- src/emitterutils.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/emitterutils.cpp b/src/emitterutils.cpp index d5a72cc..34da1bc 100644 --- a/src/emitterutils.cpp +++ b/src/emitterutils.cpp @@ -175,11 +175,17 @@ bool IsValidPlainScalar(const std::string& str, FlowType::value flowType, } // then check until something is disallowed - const RegEx& disallowed = (flowType == FlowType::Flow ? Exp::EndScalarInFlow() - : Exp::EndScalar()) || - (Exp::BlankOrBreak() + Exp::Comment()) || - Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || - Exp::Break() || Exp::Tab(); + static const RegEx& disallowed_flow = + Exp::EndScalarInFlow() || (Exp::BlankOrBreak() + Exp::Comment()) || + Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || Exp::Break() || + Exp::Tab(); + static const RegEx& disallowed_block = + Exp::EndScalar() || (Exp::BlankOrBreak() + Exp::Comment()) || + Exp::NotPrintable() || Exp::Utf8_ByteOrderMark() || Exp::Break() || + Exp::Tab(); + const RegEx& disallowed = + flowType == FlowType::Flow ? disallowed_flow : disallowed_block; + StringCharSource buffer(str.c_str(), str.size()); while (buffer) { if (disallowed.Matches(buffer)) {