| 310 | } |
| 311 | |
| 312 | SerdNode |
| 313 | serd_node_new_integer(int64_t i) |
| 314 | { |
| 315 | int64_t abs_i = (i < 0) ? -i : i; |
| 316 | const unsigned digits = serd_digits(abs_i); |
| 317 | char* buf = (char*)calloc(digits + 2, 1); |
| 318 | SerdNode node = { (const uint8_t*)buf, 0, 0, 0, SERD_LITERAL }; |
| 319 | |
| 320 | // Point s to the end |
| 321 | char* s = buf + digits - 1; |
| 322 | if (i < 0) { |
| 323 | *buf = '-'; |
| 324 | ++s; |
| 325 | } |
| 326 | |
| 327 | node.n_bytes = node.n_chars = (s - buf) + 1; |
| 328 | |
| 329 | // Write integer part (right to left) |
| 330 | do { |
| 331 | *s-- = '0' + (abs_i % 10); |
| 332 | } while ((abs_i /= 10) > 0); |
| 333 | |
| 334 | return node; |
| 335 | } |
| 336 | |
| 337 | /** |
| 338 | Base64 encoding table. |