MCPcopy Create free account
hub / github.com/apache/arrow / EncodeMetadata

Function EncodeMetadata

cpp/src/arrow/c/bridge.cc:146–180  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

144}
145
146Result<std::string> EncodeMetadata(const KeyValueMetadata& metadata) {
147 ARROW_ASSIGN_OR_RAISE(auto npairs, DowncastMetadataSize(metadata.size()));
148 std::string exported;
149
150 // Pre-compute total string size
151 size_t total_size = 4;
152 for (int32_t i = 0; i < npairs; ++i) {
153 total_size += 8 + metadata.key(i).length() + metadata.value(i).length();
154 }
155 exported.resize(total_size);
156
157 char* data_start = &exported[0];
158 char* data = data_start;
159 auto write_int32 = [&](int32_t v) -> void {
160 memcpy(data, &v, 4);
161 data += 4;
162 };
163 auto write_string = [&](const std::string& s) -> Status {
164 ARROW_ASSIGN_OR_RAISE(auto len, DowncastMetadataSize(s.length()));
165 write_int32(len);
166 if (len > 0) {
167 memcpy(data, s.data(), len);
168 data += len;
169 }
170 return Status::OK();
171 };
172
173 write_int32(npairs);
174 for (int32_t i = 0; i < npairs; ++i) {
175 RETURN_NOT_OK(write_string(metadata.key(i)));
176 RETURN_NOT_OK(write_string(metadata.value(i)));
177 }
178 DCHECK_EQ(static_cast<size_t>(data - data_start), total_size);
179 return exported;
180}
181
182struct SchemaExporter {
183 Status ExportField(const Field& field) {

Callers 1

ExportMetadataMethod · 0.85

Calls 6

resizeMethod · 0.80
OKFunction · 0.50
lengthMethod · 0.45
keyMethod · 0.45
valueMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected