Don't inherit context from parse_context

This commit is contained in:
Victor Zverovich
2018-01-14 09:27:40 -08:00
parent 217e7c76f1
commit 67928eae28
4 changed files with 38 additions and 28 deletions

View File

@@ -1556,7 +1556,7 @@ class specs_handler: public specs_setter<typename Context::char_type> {
template <typename Id>
constexpr basic_arg<Context> get_arg(Id arg_id) {
context_.check_arg_id(arg_id);
context_.parse_context().check_arg_id(arg_id);
return context_.get_arg(arg_id);
}
@@ -2519,7 +2519,6 @@ void basic_writer<Range>::write_double(T value, const format_specs &spec) {
*format_ptr = '\0';
// Format using snprintf.
char_type fill = internal::char_traits<char_type>::cast(spec.fill());
unsigned n = 0;
char_type *start = 0;
for (;;) {
@@ -2908,7 +2907,7 @@ void vformat_to(typename ArgFormatter::range out,
void on_arg_id() { arg = context.next_arg(); }
void on_arg_id(unsigned id) {
context.check_arg_id(id);
context.parse_context().check_arg_id(id);
arg = context.get_arg(id);
}
void on_arg_id(basic_string_view<Char> id) {
@@ -2916,7 +2915,7 @@ void vformat_to(typename ArgFormatter::range out,
}
void on_replacement_field(iterator it) {
context.advance_to(pointer_from(it));
context.parse_context().advance_to(pointer_from(it));
using internal::custom_formatter;
if (visit(custom_formatter<Char, Context>(context), arg))
return;
@@ -2925,10 +2924,11 @@ void vformat_to(typename ArgFormatter::range out,
}
iterator on_format_specs(iterator it) {
context.advance_to(pointer_from(it));
auto& parse_ctx = context.parse_context();
parse_ctx.advance_to(pointer_from(it));
using internal::custom_formatter;
if (visit(custom_formatter<Char, Context>(context), arg))
return iterator(context);
return iterator(parse_ctx);
basic_format_specs<Char> specs;
using internal::specs_handler;
internal::specs_checker<specs_handler<Context>>
@@ -2936,7 +2936,7 @@ void vformat_to(typename ArgFormatter::range out,
it = parse_format_specs(it, handler);
if (*it != '}')
on_error("missing '}' in format string");
context.advance_to(pointer_from(it));
parse_ctx.advance_to(pointer_from(it));
visit(ArgFormatter(out, context, specs), arg);
return it;
}