// File: /workspace/github_cpp_makefile_star2_O3/mattn[P]wandbox-run/./json.hpp
// Function: nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::lexer::get_number(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>&, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer>::lexer::token_type) const
bool get_number(basic_json& result, const token_type token) const
        {
            assert(m_start != nullptr);
            assert(m_start < m_cursor);
            assert((token == token_type::value_unsigned) or
                   (token == token_type::value_integer) or
                   (token == token_type::value_float));

            strtonum num_converter(reinterpret_cast<const char*>(m_start),
                                   reinterpret_cast<const char*>(m_cursor));

            switch (token)
            {
                case lexer::token_type::value_unsigned:
                {
                    number_unsigned_t val;
                    if (num_converter.to(val))
                    {
                        // parsing successful
                        result.m_type = value_t::number_unsigned;
                        result.m_value = val;
                        return true;
                    }
                    break;
                }

                case lexer::token_type::value_integer:
                {
                    number_integer_t val;
                    if (num_converter.to(val))
                    {
                        // parsing successful
                        result.m_type = value_t::number_integer;
                        result.m_value = val;
                        return true;
                    }
                    break;
                }

                default:
                {
                    break;
                }
            }

            // parse float (either explicitly or because a previous conversion
            // failed)
            number_float_t val;
            if (num_converter.to(val))
            {
                // parsing successful
                result.m_type = value_t::number_float;
                result.m_value = val;

                // replace infinity and NAN by null
                if (not std::isfinite(result.m_value.number_float))
                {
                    result.m_type  = value_t::null;
                    result.m_value = basic_json::json_value();
                }

                return true;
            }

            // couldn't parse number in any format
            return false;
        }

// Assembly:
pushq %rbx
subq $0x20, %rsp
movq 0x50(%rdi), %rax
testq %rax, %rax
je 0x19c46
movq 0x60(%rdi), %rcx
cmpq %rcx, %rax
jae 0x19c65
movq %rsi, %rbx
leal -0x5(%rdx), %esi
cmpl $0x3, %esi
jae 0x19c84
movq %rax, 0x10(%rsp)
movq %rcx, 0x18(%rsp)
cmpl $0x6, %edx
je 0x19bd8
cmpl $0x5, %edx
jne 0x19bfb
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1aa56
testb %al, %al
je 0x19bfb
movb $0x6, (%rbx)
jmp 0x19bee
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1aab6
testb %al, %al
je 0x19bfb
movb $0x5, (%rbx)
movq 0x8(%rsp), %rax
movq %rax, 0x8(%rbx)
movb $0x1, %al
jmp 0x19c40
leaq 0x10(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x1ab16
testb %al, %al
je 0x19c40
movb $0x7, (%rbx)
movq 0x8(%rsp), %xmm0
movq %xmm0, %rcx
movq %xmm0, 0x8(%rbx)
btrq $0x3f, %rcx
movabsq $0x7ff0000000000000, %rdx # imm = 0x7FF0000000000000
cmpq %rdx, %rcx
jl 0x19c40
movb $0x0, (%rbx)
movq $0x0, 0x8(%rbx)
addq $0x20, %rsp
popq %rbx
retq
leaq 0xb1a7d(%rip), %rdi     # 0xcb6ca
leaq 0xb16b1(%rip), %rsi     # 0xcb305
leaq 0xb22a5(%rip), %rcx     # 0xcbf00
movl $0x2c47, %edx           # imm = 0x2C47
callq 0x13130
leaq 0xb247e(%rip), %rdi     # 0xcc0ea
leaq 0xb1692(%rip), %rsi     # 0xcb305
leaq 0xb2286(%rip), %rcx     # 0xcbf00
movl $0x2c48, %edx           # imm = 0x2C48
callq 0x13130
leaq 0xb2472(%rip), %rdi     # 0xcc0fd
leaq 0xb1673(%rip), %rsi     # 0xcb305
leaq 0xb2267(%rip), %rcx     # 0xcbf00
movl $0x2c4b, %edx           # imm = 0x2C4B
callq 0x13130