non-allocating element() variant on ListParser

master
Daniel Kolesa 2016-10-24 02:52:25 +02:00
parent 1a08b018c6
commit 6fcdbe7ac1
2 changed files with 12 additions and 12 deletions

View File

@ -771,6 +771,15 @@ namespace util {
ostd::Size parse(ostd::Size n); ostd::Size parse(ostd::Size n);
ostd::Size count(); ostd::Size count();
template<typename R>
ostd::Size element(R &&writer) const {
if (!quote.empty() && (*quote == '"')) {
return unescape_string(ostd::forward<R>(writer), item);
} else {
return writer.put_n(item.data(), item.size());
}
}
CsString element() const; CsString element() const;
private: private:

View File

@ -392,18 +392,9 @@ endblock:
} }
CsString ListParser::element() const { CsString ListParser::element() const {
CsString s; auto app = ostd::appender<CsString>();
s.reserve(item.size()); element(app);
if (!quote.empty() && (*quote == '"')) { return ostd::move(app.get());
auto writer = s.iter_cap();
util::unescape_string(writer, item);
writer.put('\0');
} else {
memcpy(s.data(), item.data(), item.size());
s[item.size()] = '\0';
}
s.advance(item.size());
return s;
} }
} /* namespace util */ } /* namespace util */