use range_put_all

master
Daniel Kolesa 2017-02-19 18:13:51 +01:00
parent 5c2c441925
commit 7294580ccf
2 changed files with 11 additions and 10 deletions

View File

@ -583,23 +583,24 @@ private:
namespace util {
template<typename R>
inline R &&escape_string(R &&writer, ostd::string_range str) {
using namespace ostd::string_literals;
writer.put('"');
for (; !str.empty(); str.pop_front()) {
switch (str.front()) {
case '\n':
writer = ostd::copy(ostd::string_range{"^n"}, writer);
ostd::range_put_all(writer, "^n"_sr);
break;
case '\t':
writer = ostd::copy(ostd::string_range{"^t"}, writer);
ostd::range_put_all(writer, "^t"_sr);
break;
case '\f':
writer = ostd::copy(ostd::string_range{"^f"}, writer);
ostd::range_put_all(writer, "^f"_sr);
break;
case '"':
writer = ostd::copy(ostd::string_range{"^\""}, writer);
ostd::range_put_all(writer, "^\""_sr);
break;
case '^':
writer = ostd::copy(ostd::string_range{"^^"}, writer);
ostd::range_put_all(writer, "^^"_sr);
break;
default:
writer.put(str.front());
@ -688,7 +689,7 @@ namespace util {
if (!p_quote.empty() && (*p_quote == '"')) {
return unescape_string(std::forward<R>(writer), p_item);
} else {
writer = ostd::copy(p_item, std::move(writer));
ostd::range_put_all(writer, p_item);
return std::forward<R>(writer);
}
}
@ -759,7 +760,7 @@ private:
case cs_value_type::String:
case cs_value_type::Cstring:
case cs_value_type::Macro: {
writer = ostd::copy(vals[i].get_strr(), writer);
ostd::range_put_all(writer, vals[i].get_strr());
break;
}
default:
@ -768,7 +769,7 @@ private:
if (i == (vals.size() - 1)) {
break;
}
writer = ostd::copy(sep, writer);
ostd::range_put_all(writer, sep);
}
}

View File

@ -431,7 +431,7 @@ end:
(p.get_raw_item(true).front() == '"')) {
util::unescape_string(buf, p.get_raw_item());
} else {
buf = ostd::copy(p.get_raw_item(), std::move(buf));
ostd::range_put_all(buf, p.get_raw_item());
}
if ((n + 1) < len) {
if ((len > 2) || conj.empty()) {
@ -439,7 +439,7 @@ end:
}
if ((n + 2 == len) && !conj.empty()) {
buf.put(' ');
buf = ostd::copy(conj, std::move(buf));
ostd::range_put_all(buf, conj);
}
buf.put(' ');
}