static bool is_decimal_literal()

in src/common/utils/ArgParse.h [794:903]


  static bool is_decimal_literal(std::string_view s) {
    auto is_digit = [](auto c) constexpr {
      switch (c) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
          return true;
        default:
          return false;
      }
    };

    // precondition: we have consumed or will consume at least one digit
    auto consume_digits = [=](std::string_view sd) {
      // NOLINTNEXTLINE(readability-qualified-auto)
      auto it = std::find_if_not(std::begin(sd), std::end(sd), is_digit);
      return sd.substr(static_cast<std::size_t>(it - std::begin(sd)));
    };

    switch (lookahead(s)) {
      case '0': {
        s.remove_prefix(1);
        if (s.empty()) {
          return true;
        }
        goto integer_part;
      }
      case '1':
      case '2':
      case '3':
      case '4':
      case '5':
      case '6':
      case '7':
      case '8':
      case '9': {
        s = consume_digits(s);
        if (s.empty()) {
          return true;
        }
        goto integer_part_consumed;
      }
      case '.': {
        s.remove_prefix(1);
        goto post_decimal_point;
      }
      default:
        return false;
    }

  integer_part:
    s = consume_digits(s);
  integer_part_consumed:
    switch (lookahead(s)) {
      case '.': {
        s.remove_prefix(1);
        if (is_digit(lookahead(s))) {
          goto post_decimal_point;
        } else {
          goto exponent_part_opt;
        }
      }
      case 'e':
      case 'E': {
        s.remove_prefix(1);
        goto post_e;
      }
      default:
        return false;
    }

  post_decimal_point:
    if (is_digit(lookahead(s))) {
      s = consume_digits(s);
      goto exponent_part_opt;
    }
    return false;

  exponent_part_opt:
    switch (lookahead(s)) {
      case eof:
        return true;
      case 'e':
      case 'E': {
        s.remove_prefix(1);
        goto post_e;
      }
      default:
        return false;
    }

  post_e:
    switch (lookahead(s)) {
      case '-':
      case '+':
        s.remove_prefix(1);
    }
    if (is_digit(lookahead(s))) {
      s = consume_digits(s);
      return s.empty();
    }
    return false;
  }