20using namespace msgpack;
35 if (i >= FixMin::NegativeInt) {
36 EW.
write(
static_cast<int8_t
>(i));
41 EW.
write(FirstByte::Int8);
42 EW.
write(
static_cast<int8_t
>(i));
47 EW.
write(FirstByte::Int16);
48 EW.
write(
static_cast<int16_t
>(i));
53 EW.
write(FirstByte::Int32);
54 EW.
write(
static_cast<int32_t
>(i));
58 EW.
write(FirstByte::Int64);
63 if (u <= FixMax::PositiveInt) {
64 EW.
write(
static_cast<uint8_t
>(u));
69 EW.
write(FirstByte::UInt8);
70 EW.
write(
static_cast<uint8_t
>(u));
74 if (u <= UINT16_MAX) {
75 EW.
write(FirstByte::UInt16);
80 if (u <= UINT32_MAX) {
81 EW.
write(FirstByte::UInt32);
86 EW.
write(FirstByte::UInt64);
92 double a = std::fabs(d);
93 if (a >= std::numeric_limits<float>::min() &&
94 a <= std::numeric_limits<float>::max()) {
95 EW.
write(FirstByte::Float32);
96 EW.
write(
static_cast<float>(d));
98 EW.
write(FirstByte::Float64);
106 if (
Size <= FixMax::String)
107 EW.
write(
static_cast<uint8_t
>(FixBits::String |
Size));
108 else if (!Compatible &&
Size <= UINT8_MAX) {
109 EW.
write(FirstByte::Str8);
111 }
else if (
Size <= UINT16_MAX) {
112 EW.
write(FirstByte::Str16);
115 assert(
Size <= UINT32_MAX &&
"String object too long to be encoded");
116 EW.
write(FirstByte::Str32);
124 assert(!Compatible &&
"Attempt to write Bin format in compatible mode");
128 if (
Size <= UINT8_MAX) {
129 EW.
write(FirstByte::Bin8);
131 }
else if (
Size <= UINT16_MAX) {
132 EW.
write(FirstByte::Bin16);
135 assert(
Size <= UINT32_MAX &&
"Binary object too long to be encoded");
136 EW.
write(FirstByte::Bin32);
144 if (
Size <= FixMax::Array) {
145 EW.
write(
static_cast<uint8_t
>(FixBits::Array |
Size));
149 if (
Size <= UINT16_MAX) {
150 EW.
write(FirstByte::Array16);
155 EW.
write(FirstByte::Array32);
160 if (
Size <= FixMax::Map) {
161 EW.
write(
static_cast<uint8_t
>(FixBits::Map |
Size));
165 if (
Size <= UINT16_MAX) {
166 EW.
write(FirstByte::Map16);
171 EW.
write(FirstByte::Map32);
180 EW.
write(FirstByte::FixExt1);
183 EW.
write(FirstByte::FixExt2);
186 EW.
write(FirstByte::FixExt4);
189 EW.
write(FirstByte::FixExt8);
192 EW.
write(FirstByte::FixExt16);
195 if (
Size <= UINT8_MAX) {
196 EW.
write(FirstByte::Ext8);
198 }
else if (
Size <= UINT16_MAX) {
199 EW.
write(FirstByte::Ext16);
202 assert(
Size <= UINT32_MAX &&
"Ext size too large to be encoded");
203 EW.
write(FirstByte::Ext32);
This file contains a MessagePack writer.
This file contains constants used for implementing MessagePack support.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
size_t getBufferSize() const
const char * getBufferStart() const
StringRef - Represent a constant reference to a string, i.e.
constexpr size_t size() const
size - Get the string size.
void writeNil()
Write a Nil to the output stream.
Writer(raw_ostream &OS, bool Compatible=false)
Construct a writer, optionally enabling "Compatibility Mode" as defined in the MessagePack specificat...
void writeMapSize(uint32_t Size)
Write the header for a Map of the given size.
void writeArraySize(uint32_t Size)
Write the header for an Array of the given size.
void writeExt(int8_t Type, MemoryBufferRef Buffer)
Write a typed memory buffer (an extension type) to the output stream.
void write(bool b)
Write a Boolean to the output stream.
This class implements an extremely fast bulk output stream that can only output to a stream.
raw_ostream & write(unsigned char C)
constexpr llvm::endianness Endianness
The endianness of all multi-byte encoded values in MessagePack.
Type
MessagePack types as defined in the standard, with the exception of Integer being divided into a sign...
This is an optimization pass for GlobalISel generic memory operations.
void write(ArrayRef< value_type > Val)