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 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;
private:

View File

@ -392,18 +392,9 @@ endblock:
}
CsString ListParser::element() const {
CsString s;
s.reserve(item.size());
if (!quote.empty() && (*quote == '"')) {
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;
auto app = ostd::appender<CsString>();
element(app);
return ostd::move(app.get());
}
} /* namespace util */