! @param[in] j JSON value to serialize @param[in] use_count whether to use '#' prefixes (optimized format) @param[in] use_type whether to use '$' prefixes (optimized format) @param[in] add_prefix whether prefixes need to be used for this value */
| 13494 | @param[in] add_prefix whether prefixes need to be used for this value |
| 13495 | */ |
| 13496 | void write_ubjson(const BasicJsonType& j, const bool use_count, |
| 13497 | const bool use_type, const bool add_prefix = true) |
| 13498 | { |
| 13499 | switch (j.type()) |
| 13500 | { |
| 13501 | case value_t::null: |
| 13502 | { |
| 13503 | if (add_prefix) |
| 13504 | { |
| 13505 | oa->write_character(to_char_type('Z')); |
| 13506 | } |
| 13507 | break; |
| 13508 | } |
| 13509 | |
| 13510 | case value_t::boolean: |
| 13511 | { |
| 13512 | if (add_prefix) |
| 13513 | { |
| 13514 | oa->write_character(j.m_value.boolean |
| 13515 | ? to_char_type('T') |
| 13516 | : to_char_type('F')); |
| 13517 | } |
| 13518 | break; |
| 13519 | } |
| 13520 | |
| 13521 | case value_t::number_integer: |
| 13522 | { |
| 13523 | write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix); |
| 13524 | break; |
| 13525 | } |
| 13526 | |
| 13527 | case value_t::number_unsigned: |
| 13528 | { |
| 13529 | write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix); |
| 13530 | break; |
| 13531 | } |
| 13532 | |
| 13533 | case value_t::number_float: |
| 13534 | { |
| 13535 | write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix); |
| 13536 | break; |
| 13537 | } |
| 13538 | |
| 13539 | case value_t::string: |
| 13540 | { |
| 13541 | if (add_prefix) |
| 13542 | { |
| 13543 | oa->write_character(to_char_type('S')); |
| 13544 | } |
| 13545 | write_number_with_ubjson_prefix(j.m_value.string->size(), true); |
| 13546 | oa->write_characters( |
| 13547 | reinterpret_cast<const CharType*>(j.m_value.string->c_str()), |
| 13548 | j.m_value.string->size()); |
| 13549 | break; |
| 13550 | } |
| 13551 | |
| 13552 | case value_t::array: |
| 13553 | { |