MCPcopy Create free account
hub / github.com/bytedance/Fastbot_Android / write_cbor

Method write_cbor

native/thirdpart/json/json.hpp:11357–11596  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

11355 @param[in] j JSON value to serialize
11356 */
11357 void write_cbor(const BasicJsonType& j)
11358 {
11359 switch (j.type())
11360 {
11361 case value_t::null:
11362 {
11363 oa->write_character(to_char_type(0xF6));
11364 break;
11365 }
11366
11367 case value_t::boolean:
11368 {
11369 oa->write_character(j.m_value.boolean
11370 ? to_char_type(0xF5)
11371 : to_char_type(0xF4));
11372 break;
11373 }
11374
11375 case value_t::number_integer:
11376 {
11377 if (j.m_value.number_integer >= 0)
11378 {
11379 // CBOR does not differentiate between positive signed
11380 // integers and unsigned integers. Therefore, we used the
11381 // code from the value_t::number_unsigned case here.
11382 if (j.m_value.number_integer <= 0x17)
11383 {
11384 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
11385 }
11386 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
11387 {
11388 oa->write_character(to_char_type(0x18));
11389 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
11390 }
11391 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
11392 {
11393 oa->write_character(to_char_type(0x19));
11394 write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
11395 }
11396 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
11397 {
11398 oa->write_character(to_char_type(0x1A));
11399 write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
11400 }
11401 else
11402 {
11403 oa->write_character(to_char_type(0x1B));
11404 write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
11405 }
11406 }
11407 else
11408 {
11409 // The conversions below encode the sign in the first
11410 // byte, and the value is converted to a positive number.
11411 const auto positive_number = -1 - j.m_value.number_integer;
11412 if (j.m_value.number_integer >= -24)
11413 {
11414 write_number(static_cast<std::uint8_t>(0x20 + positive_number));

Callers 1

to_cborFunction · 0.80

Calls 3

write_characterMethod · 0.45
sizeMethod · 0.45
c_strMethod · 0.45

Tested by

no test coverage detected