summaryrefslogtreecommitdiffstats
path: root/library/cpp/string_utils/csv
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/string_utils/csv')
-rw-r--r--library/cpp/string_utils/csv/csv.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/library/cpp/string_utils/csv/csv.cpp b/library/cpp/string_utils/csv/csv.cpp
index fd3d932fcd5..6dd76de85fe 100644
--- a/library/cpp/string_utils/csv/csv.cpp
+++ b/library/cpp/string_utils/csv/csv.cpp
@@ -1,3 +1,5 @@
+#include <algorithm>
+
#include "csv.h"
TStringBuf NCsvFormat::CsvSplitter::Consume() {
@@ -70,10 +72,10 @@ TString NCsvFormat::TLinesSplitter::ConsumeLine() {
TString result;
TString line;
while (Input.ReadLine(line)) {
- for (auto it = line.begin(); it != line.end(); ++it) {
- if (*it == Quote) {
- Escape = !Escape;
- }
+ const size_t quoteCount = std::count(line.cbegin(), line.cend(), Quote);
+ // A theoretically faster version of "if (quoteCount %2 == 1)"
+ if (quoteCount & 1) {
+ Escape = !Escape;
}
if (!result) {
result = line;