non-allocating element() variant on ListParser
parent
1a08b018c6
commit
6fcdbe7ac1
|
@ -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:
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue