forked from OctaForge/libostd
clean up range writer
This commit is contained in:
parent
bd5aa4795c
commit
ccb0564bfc
|
@ -682,7 +682,9 @@ private:
|
||||||
throw format_error{"tuples need the '%s' spec"};
|
throw format_error{"tuples need the '%s' spec"};
|
||||||
}
|
}
|
||||||
writer.put('{');
|
writer.put('{');
|
||||||
write_range_val(writer, escape, false, "%s", ", ", val);
|
write_range_val(writer, [&writer, escape](auto const &rval) {
|
||||||
|
format_spec{'s', escape}.write_arg(writer, 0, rval);
|
||||||
|
}, ", ", val);
|
||||||
writer.put('}');
|
writer.put('}');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -775,11 +777,9 @@ private:
|
||||||
sp.write_fmt(writer, item);
|
sp.write_fmt(writer, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename R, typename T>
|
template<typename R, typename F, typename T>
|
||||||
void write_range_val(
|
void write_range_val(
|
||||||
R &writer, bool escape, bool expandval, string_range ifmt,
|
R &writer, F &&func, string_range sep, T const &val
|
||||||
string_range sep,
|
|
||||||
T const &val
|
|
||||||
) const {
|
) const {
|
||||||
if constexpr(detail::iterable_test<T>) {
|
if constexpr(detail::iterable_test<T>) {
|
||||||
auto range = ostd::iter(val);
|
auto range = ostd::iter(val);
|
||||||
|
@ -787,7 +787,7 @@ private:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (;;) {
|
for (;;) {
|
||||||
write_range_item(writer, escape, expandval, ifmt, range.front());
|
func(range.front());
|
||||||
range.pop_front();
|
range.pop_front();
|
||||||
if (range.empty()) {
|
if (range.empty()) {
|
||||||
break;
|
break;
|
||||||
|
@ -812,9 +812,14 @@ private:
|
||||||
write_range(writer, idx - 1, expandval, sep, args...);
|
write_range(writer, idx - 1, expandval, sep, args...);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
write_range_val(
|
write_range_val(writer, [
|
||||||
writer, p_gflags & FMT_FLAG_AT, expandval, rest(), sep, val
|
this, &writer, escape = p_gflags & FMT_FLAG_AT, expandval,
|
||||||
);
|
fmt = rest()
|
||||||
|
](auto const &rval) {
|
||||||
|
this->write_range_item(
|
||||||
|
writer, escape, expandval, fmt, rval
|
||||||
|
);
|
||||||
|
}, sep, val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue