| 6636 | std::is_same<NumberType, number_integer_t>::value, |
| 6637 | int> = 0> |
| 6638 | void dump_integer(NumberType x) |
| 6639 | { |
| 6640 | // special case for "0" |
| 6641 | if (x == 0) |
| 6642 | { |
| 6643 | o->write_character('0'); |
| 6644 | return; |
| 6645 | } |
| 6646 | |
| 6647 | const bool is_negative = (x <= 0) and (x != 0); // see issue #755 |
| 6648 | std::size_t i = 0; |
| 6649 | |
| 6650 | while (x != 0) |
| 6651 | { |
| 6652 | // spare 1 byte for '\0' |
| 6653 | assert(i < number_buffer.size() - 1); |
| 6654 | |
| 6655 | const auto digit = std::labs(static_cast<long>(x % 10)); |
| 6656 | number_buffer[i++] = static_cast<char>('0' + digit); |
| 6657 | x /= 10; |
| 6658 | } |
| 6659 | |
| 6660 | if (is_negative) |
| 6661 | { |
| 6662 | // make sure there is capacity for the '-' |
| 6663 | assert(i < number_buffer.size() - 2); |
| 6664 | number_buffer[i++] = '-'; |
| 6665 | } |
| 6666 | |
| 6667 | std::reverse(number_buffer.begin(), number_buffer.begin() + i); |
| 6668 | o->write_characters(number_buffer.data(), i); |
| 6669 | } |
| 6670 | |
| 6671 | /*! |
| 6672 | @brief dump a floating-point number |
nothing calls this directly
no test coverage detected