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

Function CopyTable

native/thirdpart/flatbuffers/reflection.cpp:376–498  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

374}
375
376Offset<const Table *> CopyTable(FlatBufferBuilder &fbb,
377 const reflection::Schema &schema,
378 const reflection::Object &objectdef,
379 const Table &table, bool use_string_pooling) {
380 // Before we can construct the table, we have to first generate any
381 // subobjects, and collect their offsets.
382 std::vector<uoffset_t> offsets;
383 auto fielddefs = objectdef.fields();
384 for (auto it = fielddefs->begin(); it != fielddefs->end(); ++it) {
385 auto &fielddef = **it;
386 // Skip if field is not present in the source.
387 if (!table.CheckField(fielddef.offset())) continue;
388 uoffset_t offset = 0;
389 switch (fielddef.type()->base_type()) {
390 case reflection::String: {
391 offset = use_string_pooling
392 ? fbb.CreateSharedString(GetFieldS(table, fielddef)).o
393 : fbb.CreateString(GetFieldS(table, fielddef)).o;
394 break;
395 }
396 case reflection::Obj: {
397 auto &subobjectdef = *schema.objects()->Get(fielddef.type()->index());
398 if (!subobjectdef.is_struct()) {
399 offset = CopyTable(fbb, schema, subobjectdef,
400 *GetFieldT(table, fielddef), use_string_pooling)
401 .o;
402 }
403 break;
404 }
405 case reflection::Union: {
406 auto &subobjectdef = GetUnionType(schema, objectdef, fielddef, table);
407 offset = CopyTable(fbb, schema, subobjectdef,
408 *GetFieldT(table, fielddef), use_string_pooling)
409 .o;
410 break;
411 }
412 case reflection::Vector: {
413 auto vec =
414 table.GetPointer<const Vector<Offset<Table>> *>(fielddef.offset());
415 auto element_base_type = fielddef.type()->element();
416 auto elemobjectdef =
417 element_base_type == reflection::Obj
418 ? schema.objects()->Get(fielddef.type()->index())
419 : nullptr;
420 switch (element_base_type) {
421 case reflection::String: {
422 std::vector<Offset<const String *>> elements(vec->size());
423 auto vec_s = reinterpret_cast<const Vector<Offset<String>> *>(vec);
424 for (uoffset_t i = 0; i < vec_s->size(); i++) {
425 elements[i] = use_string_pooling
426 ? fbb.CreateSharedString(vec_s->Get(i)).o
427 : fbb.CreateString(vec_s->Get(i)).o;
428 }
429 offset = fbb.CreateVector(elements).o;
430 break;
431 }
432 case reflection::Obj: {
433 if (!elemobjectdef->is_struct()) {

Callers

nothing calls this directly

Calls 14

GetFieldSFunction · 0.85
GetFieldTFunction · 0.85
GetTypeSizeFunction · 0.85
CopyInlineFunction · 0.85
CheckFieldMethod · 0.80
push_backMethod · 0.80
StartStructMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
GetMethod · 0.45
sizeMethod · 0.45
StartVectorMethod · 0.45

Tested by

no test coverage detected