| 11303 | std::is_same<NumberType, number_integer_t>::value, |
| 11304 | int> = 0> |
| 11305 | void dump_integer(NumberType x) |
| 11306 | { |
| 11307 | // special case for "0" |
| 11308 | if (x == 0) |
| 11309 | { |
| 11310 | o->write_character('0'); |
| 11311 | return; |
| 11312 | } |
| 11313 | |
| 11314 | const bool is_negative = std::is_same<NumberType, number_integer_t>::value and not (x >= 0); // see issue #755 |
| 11315 | std::size_t i = 0; |
| 11316 | |
| 11317 | while (x != 0) |
| 11318 | { |
| 11319 | // spare 1 byte for '\0' |
| 11320 | assert(i < number_buffer.size() - 1); |
| 11321 | |
| 11322 | const auto digit = std::labs(static_cast<long>(x % 10)); |
| 11323 | number_buffer[i++] = static_cast<char>('0' + digit); |
| 11324 | x /= 10; |
| 11325 | } |
| 11326 | |
| 11327 | if (is_negative) |
| 11328 | { |
| 11329 | // make sure there is capacity for the '-' |
| 11330 | assert(i < number_buffer.size() - 2); |
| 11331 | number_buffer[i++] = '-'; |
| 11332 | } |
| 11333 | |
| 11334 | std::reverse(number_buffer.begin(), number_buffer.begin() + i); |
| 11335 | o->write_characters(number_buffer.data(), i); |
| 11336 | } |
| 11337 | |
| 11338 | /*! |
| 11339 | @brief dump a floating-point number |
nothing calls this directly
no test coverage detected