MCPcopy Create free account
hub / github.com/CalcProgrammer1/OpenRGB / write_cbor

Method write_cbor

dependencies/json/json.hpp:12867–13167  ·  view source on GitHub ↗

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

Source from the content-addressed store, hash-verified

12865 @param[in] j JSON value to serialize
12866 */
12867 void write_cbor(const BasicJsonType& j)
12868 {
12869 switch (j.type())
12870 {
12871 case value_t::null:
12872 {
12873 oa->write_character(to_char_type(0xF6));
12874 break;
12875 }
12876
12877 case value_t::boolean:
12878 {
12879 oa->write_character(j.m_value.boolean
12880 ? to_char_type(0xF5)
12881 : to_char_type(0xF4));
12882 break;
12883 }
12884
12885 case value_t::number_integer:
12886 {
12887 if (j.m_value.number_integer >= 0)
12888 {
12889 // CBOR does not differentiate between positive signed
12890 // integers and unsigned integers. Therefore, we used the
12891 // code from the value_t::number_unsigned case here.
12892 if (j.m_value.number_integer <= 0x17)
12893 {
12894 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
12895 }
12896 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint8_t>::max)())
12897 {
12898 oa->write_character(to_char_type(0x18));
12899 write_number(static_cast<std::uint8_t>(j.m_value.number_integer));
12900 }
12901 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint16_t>::max)())
12902 {
12903 oa->write_character(to_char_type(0x19));
12904 write_number(static_cast<std::uint16_t>(j.m_value.number_integer));
12905 }
12906 else if (j.m_value.number_integer <= (std::numeric_limits<std::uint32_t>::max)())
12907 {
12908 oa->write_character(to_char_type(0x1A));
12909 write_number(static_cast<std::uint32_t>(j.m_value.number_integer));
12910 }
12911 else
12912 {
12913 oa->write_character(to_char_type(0x1B));
12914 write_number(static_cast<std::uint64_t>(j.m_value.number_integer));
12915 }
12916 }
12917 else
12918 {
12919 // The conversions below encode the sign in the first
12920 // byte, and the value is converted to a positive number.
12921 const auto positive_number = -1 - j.m_value.number_integer;
12922 if (j.m_value.number_integer >= -24)
12923 {
12924 write_number(static_cast<std::uint8_t>(0x20 + positive_number));

Callers 1

to_cborFunction · 0.45

Calls 5

dataMethod · 0.80
write_characterMethod · 0.45
sizeMethod · 0.45
has_subtypeMethod · 0.45
subtypeMethod · 0.45

Tested by

no test coverage detected