MCPcopy Create free account
hub / github.com/apache/fory / write_u16string_data

Function write_u16string_data

cpp/fory/serialization/string_serializer.h:68–99  ·  view source on GitHub ↗

write UTF-16 string data, converting to UTF-8 or using native encoding

Source from the content-addressed store, hash-verified

66
67/// write UTF-16 string data, converting to UTF-8 or using native encoding
68inline void write_u16string_data(const char16_t *data, size_t size,
69 WriteContext &ctx) {
70 if (size == 0) {
71 // Empty string: write zero length with UTF8 encoding
72 ctx.write_var_uint36_small(static_cast<uint64_t>(StringEncoding::UTF8));
73 return;
74 }
75
76 const uint16_t *u16_data = reinterpret_cast<const uint16_t *>(data);
77
78 // Check if string can be encoded as Latin1 (more compact)
79 if (is_latin1(u16_data, size)) {
80 // encode as Latin1 for compactness
81 uint64_t size_with_encoding = (static_cast<uint64_t>(size) << 2) |
82 static_cast<uint64_t>(StringEncoding::LATIN1);
83 ctx.write_var_uint36_small(size_with_encoding);
84
85 // write each char16_t as a single byte
86 for (size_t i = 0; i < size; ++i) {
87 ctx.write_uint8(static_cast<uint8_t>(data[i]));
88 }
89 } else {
90 // Convert to UTF-8
91 std::string utf8 = utf16_to_utf8(u16_data, size);
92 uint64_t size_with_encoding = (static_cast<uint64_t>(utf8.size()) << 2) |
93 static_cast<uint64_t>(StringEncoding::UTF8);
94 ctx.write_var_uint36_small(size_with_encoding);
95 if (!utf8.empty()) {
96 ctx.write_bytes(utf8.data(), utf8.size());
97 }
98 }
99}
100
101/// Read string data and return as std::string
102inline std::string read_string_data(ReadContext &ctx) {

Callers 1

write_dataMethod · 0.85

Calls 8

is_latin1Function · 0.85
utf16_to_utf8Function · 0.50
write_uint8Method · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
write_bytesMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected