FMT_FUNC gen_digits_params process_specs()

in src/main/cpp/sdk/common/spdlog/fmt/bundled/format-inl.h [673:712]


FMT_FUNC gen_digits_params process_specs(const core_format_specs &specs,
                                         int exp, buffer &buf) {
  auto params = gen_digits_params();
  int num_digits = specs.precision >= 0 ? specs.precision : 6;
  switch (specs.type) {
  case 'G':
    params.upper = true;
    FMT_FALLTHROUGH
  case '\0': case 'g':
    params.trailing_zeros = (specs.flags & HASH_FLAG) != 0;
    if (-4 <= exp && exp < num_digits + 1) {
      params.fixed = true;
      if (!specs.type && params.trailing_zeros && exp >= 0)
        num_digits = exp + 1;
    }
    break;
  case 'F':
    params.upper = true;
    FMT_FALLTHROUGH
  case 'f': {
    params.fixed = true;
    params.trailing_zeros = true;
    int adjusted_min_digits = num_digits + exp;
    if (adjusted_min_digits > 0)
      num_digits = adjusted_min_digits;
    break;
  }
  case 'E':
    params.upper = true;
    FMT_FALLTHROUGH
  case 'e':
    ++num_digits;
    break;
  }
  params.num_digits = num_digits;
  char_counter counter{num_digits};
  grisu2_prettify(params, params.num_digits, exp - num_digits, counter);
  buf.resize(to_unsigned(counter.size));
  return params;
}