From 151466052567c6a82f7e113387390b89dbcb2721 Mon Sep 17 00:00:00 2001 From: Ydot Date: Thu, 12 Sep 2024 17:11:50 +0300 Subject: [PATCH 1/2] fix quadratic speed --- src/serialize_filters.cpp | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/src/serialize_filters.cpp b/src/serialize_filters.cpp index e467fd8c..54a18cc4 100644 --- a/src/serialize_filters.cpp +++ b/src/serialize_filters.cpp @@ -152,28 +152,20 @@ InternalValue Serialize::Filter(const InternalValue& value, RenderContext& conte DocumentWrapper jsonDoc; const auto jsonValue = jsonDoc.CreateValue(value); const auto jsonString = jsonValue.AsString(static_cast(indent)); - const auto result = std::accumulate(jsonString.begin(), jsonString.end(), ""s, [](const auto &str, const auto &c) - { - switch (c) - { - case '<': - return str + "\\u003c"; - break; - case '>': - return str +"\\u003e"; - break; - case '&': - return str +"\\u0026"; - break; - case '\'': - return str +"\\u0027"; - break; - default: - return str + c; - break; + std::string result = ""s; + for (char c : jsonString) { + if (c == '<') { + result.append("\\u003c"); + } else if (c == '>') { + result.append("\\u003e"); + } else if (c == '&') { + result.append("\\u0026"); + } else if (c == '\'') { + result.append("\\u0027"); + } else { + result.push_back(c); } - }); - + } return result; } From 9188f41adecaed0599a1b86ecf0892edc6220963 Mon Sep 17 00:00:00 2001 From: Ydot Date: Fri, 13 Sep 2024 12:10:07 +0300 Subject: [PATCH 2/2] add reserve --- src/serialize_filters.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/serialize_filters.cpp b/src/serialize_filters.cpp index 54a18cc4..a8e4363a 100644 --- a/src/serialize_filters.cpp +++ b/src/serialize_filters.cpp @@ -153,6 +153,7 @@ InternalValue Serialize::Filter(const InternalValue& value, RenderContext& conte const auto jsonValue = jsonDoc.CreateValue(value); const auto jsonString = jsonValue.AsString(static_cast(indent)); std::string result = ""s; + result.reserve(jsonString.size()); for (char c : jsonString) { if (c == '<') { result.append("\\u003c");