Removed parsed_specs_checker class

This commit is contained in:
stryku 2019-01-09 21:46:14 +01:00
parent c735a69ef8
commit 7772ca7ce8
3 changed files with 27 additions and 36 deletions

View File

@ -881,9 +881,9 @@ FMT_CONSTEXPR typename internal::result_of<Visitor(int)>::type
template <typename Char, typename ErrorHandler = internal::error_handler> template <typename Char, typename ErrorHandler = internal::error_handler>
class basic_parse_context : private ErrorHandler { class basic_parse_context : private ErrorHandler {
private: private:
basic_string_view<Char> primary_format_str_; basic_string_view<Char> primary_format_str_;
basic_string_view<Char> format_str_; basic_string_view<Char> format_str_;
int next_arg_id_; int next_arg_id_;
public: public:
typedef Char char_type; typedef Char char_type;

View File

@ -1596,7 +1596,8 @@ class specs_setter {
basic_format_specs<Char> &specs_; basic_format_specs<Char> &specs_;
}; };
template <typename ErrorHandler> class numeric_specs_checker { template <typename ErrorHandler>
class numeric_specs_checker {
public: public:
FMT_CONSTEXPR numeric_specs_checker(ErrorHandler &eh, internal::type arg_type) FMT_CONSTEXPR numeric_specs_checker(ErrorHandler &eh, internal::type arg_type)
: error_handler_(eh), arg_type_(arg_type) {} : error_handler_(eh), arg_type_(arg_type) {}

View File

@ -202,35 +202,6 @@ private:
basic_parse_context<Char> parse_context_; basic_parse_context<Char> parse_context_;
}; };
template <typename ErrorHandler> class parsed_specs_checker {
public:
FMT_CONSTEXPR parsed_specs_checker(ErrorHandler &error_handler,
internal::type arg_type)
: checker_(error_handler, arg_type) {}
template <typename Char>
FMT_CONSTEXPR void check(const basic_format_specs<Char> &specs) {
if (specs.align_ == ALIGN_NUMERIC) {
checker_.require_numeric_argument();
}
if (specs.has(PLUS_FLAG | MINUS_FLAG | SIGN_FLAG)) {
checker_.check_sign();
}
if (specs.has(HASH_FLAG)) {
checker_.require_numeric_argument();
}
if (specs.has_precision()) {
checker_.check_precision();
}
}
private:
numeric_specs_checker<ErrorHandler> checker_;
};
template <typename Format, typename PreparedPartsProvider, typename... Args> template <typename Format, typename PreparedPartsProvider, typename... Args>
class prepared_format { class prepared_format {
public: public:
@ -344,9 +315,7 @@ private:
handle_dynamic_spec<internal::precision_checker>( handle_dynamic_spec<internal::precision_checker>(
specs.precision, specs.precision_ref, ctx); specs.precision, specs.precision_ref, ctx);
internal::error_handler h; check_prepared_specs(specs, arg.type());
parsed_specs_checker<internal::error_handler> checker(h, arg.type());
checker.check(specs);
advance_parse_context_to_specification(ctx, part); advance_parse_context_to_specification(ctx, part);
ctx.advance_to( ctx.advance_to(
visit_format_arg(arg_formatter<Range>(ctx, &specs), arg)); visit_format_arg(arg_formatter<Range>(ctx, &specs), arg));
@ -373,6 +342,27 @@ private:
ctx.advance_to(stopped_at); ctx.advance_to(stopped_at);
} }
template <typename Char>
void check_prepared_specs(const basic_format_specs<Char> &specs, internal::type arg_type) const {
internal::error_handler h;
numeric_specs_checker<internal::error_handler> checker(h, arg_type);
if (specs.align_ == ALIGN_NUMERIC) {
checker.require_numeric_argument();
}
if (specs.has(PLUS_FLAG | MINUS_FLAG | SIGN_FLAG)) {
checker.check_sign();
}
if (specs.has(HASH_FLAG)) {
checker.require_numeric_argument();
}
if (specs.has_precision()) {
checker.check_precision();
}
}
private: private:
Format format_; Format format_;
PreparedPartsProvider parts_provider_; PreparedPartsProvider parts_provider_;