! @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 @param[in] use_bjdata whether write in BJData format, default is false */
| 15652 | @param[in] use_bjdata whether write in BJData format, default is false |
| 15653 | */ |
| 15654 | void write_ubjson(const BasicJsonType& j, const bool use_count, |
| 15655 | const bool use_type, const bool add_prefix = true, |
| 15656 | const bool use_bjdata = false) |
| 15657 | { |
| 15658 | switch (j.type()) |
| 15659 | { |
| 15660 | case value_t::null: |
| 15661 | { |
| 15662 | if (add_prefix) |
| 15663 | { |
| 15664 | oa->write_character(to_char_type('Z')); |
| 15665 | } |
| 15666 | break; |
| 15667 | } |
| 15668 | |
| 15669 | case value_t::boolean: |
| 15670 | { |
| 15671 | if (add_prefix) |
| 15672 | { |
| 15673 | oa->write_character(j.m_value.boolean |
| 15674 | ? to_char_type('T') |
| 15675 | : to_char_type('F')); |
| 15676 | } |
| 15677 | break; |
| 15678 | } |
| 15679 | |
| 15680 | case value_t::number_integer: |
| 15681 | { |
| 15682 | write_number_with_ubjson_prefix(j.m_value.number_integer, add_prefix, use_bjdata); |
| 15683 | break; |
| 15684 | } |
| 15685 | |
| 15686 | case value_t::number_unsigned: |
| 15687 | { |
| 15688 | write_number_with_ubjson_prefix(j.m_value.number_unsigned, add_prefix, use_bjdata); |
| 15689 | break; |
| 15690 | } |
| 15691 | |
| 15692 | case value_t::number_float: |
| 15693 | { |
| 15694 | write_number_with_ubjson_prefix(j.m_value.number_float, add_prefix, use_bjdata); |
| 15695 | break; |
| 15696 | } |
| 15697 | |
| 15698 | case value_t::string: |
| 15699 | { |
| 15700 | if (add_prefix) |
| 15701 | { |
| 15702 | oa->write_character(to_char_type('S')); |
| 15703 | } |
| 15704 | write_number_with_ubjson_prefix(j.m_value.string->size(), true, use_bjdata); |
| 15705 | oa->write_characters( |
| 15706 | reinterpret_cast<const CharType*>(j.m_value.string->c_str()), |
| 15707 | j.m_value.string->size()); |
| 15708 | break; |
| 15709 | } |
| 15710 | |
| 15711 | case value_t::array: |