MCPcopy Create free account
hub / github.com/Open-GD/OpenGD / write_cbor

Method write_cbor

Source/external/json.hpp:15004–15323  ·  view source on GitHub ↗

! @param[in] j JSON value to serialize */

Source from the content-addressed store, hash-verified

15002 @param[in] j JSON value to serialize
15003 */
15004 void write_cbor(const BasicJsonType& j)
15005 {
15006 switch (j.type())
15007 {
15008 case value_t::null:
15009 {
15010 oa->write_character(to_char_type(0xF6));
15011 break;
15012 }
15013
15014 case value_t::boolean:
15015 {
15016 oa->write_character(j.m_value.boolean
15017 ? to_char_type(0xF5)
15018 : to_char_type(0xF4));
15019 break;
15020 }
15021
15022 case value_t::number_integer:
15023 {
15024 if (j.m_value.number_integer >= 0)
15025 {
15026 // CBOR does not differentiate between positive signed
15027 // integers and unsigned integers. Therefore, we used the
15028 // code from the value_t::number_unsigned case here.
15029 if (j.m_value.number_integer <= 0x17)
15030 {
15031 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
15032 }
15033 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
15034 {
15035 oa->write_character(to_char_type(0x18));
15036 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
15037 }
15038 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
15039 {
15040 oa->write_character(to_char_type(0x19));
15041 write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
15042 }
15043 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
15044 {
15045 oa->write_character(to_char_type(0x1A));
15046 write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
15047 }
15048 else
15049 {
15050 oa->write_character(to_char_type(0x1B));
15051 write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
15052 }
15053 }
15054 else
15055 {
15056 // The conversions below encode the sign in the first
15057 // byte, and the value is converted to a positive number.
15058 const auto positive_number = -1 - j.m_value.number_integer;
15059 if (j.m_value.number_integer >= -24)
15060 {
15061 write_number(static_cast<std::uint8_t>(0x20 + positive_number));

Callers 1

to_cborFunction · 0.80

Calls 2

sizeMethod · 0.80
write_characterMethod · 0.45

Tested by

no test coverage detected