summaryrefslogtreecommitdiff
path: root/dart
diff options
context:
space:
mode:
authorIvan Dlugos <6349682+vaind@users.noreply.github.com>2021-06-14 19:15:56 +0200
committerGitHub <noreply@github.com>2021-06-14 10:15:56 -0700
commit4e3a66c1410e77970184bc1f736d87406077c4bd (patch)
treeae61cbe46e4f1974f544feb2beb58e18d7df04d2 /dart
parentd959e232082641fb30dba457085c6bdc97419f4c (diff)
downloadflatbuffers-4e3a66c1410e77970184bc1f736d87406077c4bd.tar.gz
flatbuffers-4e3a66c1410e77970184bc1f736d87406077c4bd.tar.bz2
flatbuffers-4e3a66c1410e77970184bc1f736d87406077c4bd.zip
Dart object API (#6682)
* dart test scripts - generate with `--gen-object-api` * Dart object API, pack and unpack methods (WIP) * Dart flatc - extract Builder code to separate functions to reuse it in Pack() * Dart flatc - use builder field-building implementation in pack() * Dart flatc - add pack() as an intance method of the "T" class * Dart object API - make inner fields unpacked as well * Dart object API - use pack() when collecting field offsets * Dart object API - use packOnce() for fields that are structs or vectors of structs * Dart object API - remove obsolete union support TODO * Dart object API - minor review changes, test and fixes * Dart object API - revert packOnce() - not supported by other object API implementations * Dart object API - update docs * update dart generated code in tests/ to fix CI failure on ./scripts/check-generated-code.sh * Dart flatc - fix compilation for old MSVC and c++0x
Diffstat (limited to 'dart')
-rw-r--r--dart/test/flat_buffers_test.dart66
-rw-r--r--dart/test/monster_test_my_game.example2_generated.dart21
-rw-r--r--dart/test/monster_test_my_game.example_generated.dart683
-rw-r--r--dart/test/monster_test_my_game_generated.dart21
4 files changed, 790 insertions, 1 deletions
diff --git a/dart/test/flat_buffers_test.dart b/dart/test/flat_buffers_test.dart
index f4e084aa..0e8c7572 100644
--- a/dart/test/flat_buffers_test.dart
+++ b/dart/test/flat_buffers_test.dart
@@ -12,10 +12,12 @@ import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
import './monster_test_my_game.example_generated.dart' as example;
+import './monster_test_my_game.example2_generated.dart' as example2;
main() {
defineReflectiveSuite(() {
defineReflectiveTests(BuilderTest);
+ defineReflectiveTests(ObjectAPITest);
defineReflectiveTests(CheckOtherLangaugesData);
defineReflectiveTests(GeneratorTest);
});
@@ -667,6 +669,70 @@ class BuilderTest {
}
}
+@reflectiveTest
+class ObjectAPITest {
+ void test_tableStat() {
+ final object1 = example.StatT(count: 3, id: "foo", val: 4);
+ final fbb = Builder();
+ final data = fbb.finish(object1.pack(fbb));
+ final object2 = example.Stat(data).unpack();
+ expect(object2.count, object1.count);
+ expect(object2.id, object1.id);
+ expect(object2.val, object1.val);
+ expect(object2.toString(), object1.toString());
+ }
+
+ void test_tableMonster() {
+ final monster = example.MonsterT()
+ ..pos = example.Vec3T(
+ x: 1,
+ y: 2,
+ z: 3,
+ test1: 4.0,
+ test2: example.Color.Red,
+ test3: example.TestT(a: 1, b: 2))
+ ..mana = 2
+ ..name = 'Monstrous'
+ ..inventory = [24, 42]
+ ..color = example.Color.Green
+ // TODO be smarter for unions and automatically set the `type` field?
+ ..testType = example.AnyTypeId.MyGame_Example2_Monster
+ ..test = example2.MonsterT()
+ ..test4 = [example.TestT(a: 3, b: 4), example.TestT(a: 5, b: 6)]
+ ..testarrayofstring = ["foo", "bar"]
+ ..testarrayoftables = [example.MonsterT(name: 'Oof')]
+ ..enemy = example.MonsterT(name: 'Enemy')
+ ..testarrayofbools = [false, true, false]
+ ..testf = 42.24
+ ..testarrayofsortedstruct = [
+ example.AbilityT(id: 1, distance: 5),
+ example.AbilityT(id: 3, distance: 7)
+ ]
+ ..vectorOfLongs = [5, 6, 7]
+ ..vectorOfDoubles = [8.9, 9.0, 10.1, 11.2]
+ ..anyAmbiguousType = example.AnyAmbiguousAliasesTypeId.M2
+ ..anyAmbiguous = null
+ ..vectorOfEnums = [example.Color.Blue, example.Color.Green]
+ ..signedEnum = example.Race.None;
+
+ final fbBuilder = Builder();
+ final offset = monster.pack(fbBuilder);
+ expect(offset, isNonZero);
+ final data = fbBuilder.finish(offset);
+
+ // TODO currently broken because of struct builder issue, see #6688
+ // final monster2 = example.Monster(data); // Monster (reader)
+ // expect(
+ // // map Monster => MonsterT, Vec3 => Vec3T, ...
+ // monster2.toString().replaceAllMapped(
+ // RegExp('([a-zA-z0-9]+){'), (match) => match.group(1) + 'T{'),
+ // monster.toString());
+ //
+ // final monster3 = monster2.unpack(); // MonsterT
+ // expect(monster3.toString(), monster.toString());
+ }
+}
+
class StringListWrapperImpl {
final BufferContext bp;
final int offset;
diff --git a/dart/test/monster_test_my_game.example2_generated.dart b/dart/test/monster_test_my_game.example2_generated.dart
index eed14bc2..d1c6a03a 100644
--- a/dart/test/monster_test_my_game.example2_generated.dart
+++ b/dart/test/monster_test_my_game.example2_generated.dart
@@ -26,6 +26,27 @@ class Monster {
String toString() {
return 'Monster{}';
}
+
+ MonsterT unpack() => MonsterT();
+
+ static int pack(fb.Builder fbBuilder, MonsterT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class MonsterT {
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.startTable();
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'MonsterT{}';
+ }
}
class _MonsterReader extends fb.TableReader<Monster> {
diff --git a/dart/test/monster_test_my_game.example_generated.dart b/dart/test/monster_test_my_game.example_generated.dart
index 4a5f5c99..75302f9f 100644
--- a/dart/test/monster_test_my_game.example_generated.dart
+++ b/dart/test/monster_test_my_game.example_generated.dart
@@ -232,6 +232,38 @@ class Test {
String toString() {
return 'Test{a: $a, b: $b}';
}
+
+ TestT unpack() => TestT(
+ a: a,
+ b: b);
+
+ static int pack(fb.Builder fbBuilder, TestT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class TestT {
+ int a;
+ int b;
+
+ TestT({
+ this.a,
+ this.b});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.pad(1);
+ fbBuilder.putInt8(b);
+ fbBuilder.putInt16(a);
+ return fbBuilder.offset;
+ }
+
+ @override
+ String toString() {
+ return 'TestT{a: $a, b: $b}';
+ }
}
class _TestReader extends fb.StructReader<Test> {
@@ -310,6 +342,34 @@ class TestSimpleTableWithEnum {
String toString() {
return 'TestSimpleTableWithEnum{color: $color}';
}
+
+ TestSimpleTableWithEnumT unpack() => TestSimpleTableWithEnumT(
+ color: color);
+
+ static int pack(fb.Builder fbBuilder, TestSimpleTableWithEnumT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class TestSimpleTableWithEnumT {
+ Color color;
+
+ TestSimpleTableWithEnumT({
+ this.color});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.startTable();
+ fbBuilder.addUint8(0, color?.value);
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'TestSimpleTableWithEnumT{color: $color}';
+ }
}
class _TestSimpleTableWithEnumReader extends fb.TableReader<TestSimpleTableWithEnum> {
@@ -387,6 +447,56 @@ class Vec3 {
String toString() {
return 'Vec3{x: $x, y: $y, z: $z, test1: $test1, test2: $test2, test3: $test3}';
}
+
+ Vec3T unpack() => Vec3T(
+ x: x,
+ y: y,
+ z: z,
+ test1: test1,
+ test2: test2,
+ test3: test3?.unpack());
+
+ static int pack(fb.Builder fbBuilder, Vec3T object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class Vec3T {
+ double x;
+ double y;
+ double z;
+ double test1;
+ Color test2;
+ TestT test3;
+
+ Vec3T({
+ this.x,
+ this.y,
+ this.z,
+ this.test1,
+ this.test2,
+ this.test3});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.pad(2);
+ test3.pack(fbBuilder);
+ fbBuilder.pad(1);
+ fbBuilder.putUint8(test2?.value);
+ fbBuilder.putFloat64(test1);
+ fbBuilder.pad(4);
+ fbBuilder.putFloat32(z);
+ fbBuilder.putFloat32(y);
+ fbBuilder.putFloat32(x);
+ return fbBuilder.offset;
+ }
+
+ @override
+ String toString() {
+ return 'Vec3T{x: $x, y: $y, z: $z, test1: $test1, test2: $test2, test3: $test3}';
+ }
}
class _Vec3Reader extends fb.StructReader<Vec3> {
@@ -486,6 +596,37 @@ class Ability {
String toString() {
return 'Ability{id: $id, distance: $distance}';
}
+
+ AbilityT unpack() => AbilityT(
+ id: id,
+ distance: distance);
+
+ static int pack(fb.Builder fbBuilder, AbilityT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class AbilityT {
+ int id;
+ int distance;
+
+ AbilityT({
+ this.id,
+ this.distance});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.putUint32(distance);
+ fbBuilder.putUint32(id);
+ return fbBuilder.offset;
+ }
+
+ @override
+ String toString() {
+ return 'AbilityT{id: $id, distance: $distance}';
+ }
}
class _AbilityReader extends fb.StructReader<Ability> {
@@ -560,6 +701,41 @@ class StructOfStructs {
String toString() {
return 'StructOfStructs{a: $a, b: $b, c: $c}';
}
+
+ StructOfStructsT unpack() => StructOfStructsT(
+ a: a?.unpack(),
+ b: b?.unpack(),
+ c: c?.unpack());
+
+ static int pack(fb.Builder fbBuilder, StructOfStructsT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class StructOfStructsT {
+ AbilityT a;
+ TestT b;
+ AbilityT c;
+
+ StructOfStructsT({
+ this.a,
+ this.b,
+ this.c});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ c.pack(fbBuilder);
+ b.pack(fbBuilder);
+ a.pack(fbBuilder);
+ return fbBuilder.offset;
+ }
+
+ @override
+ String toString() {
+ return 'StructOfStructsT{a: $a, b: $b, c: $c}';
+ }
}
class _StructOfStructsReader extends fb.StructReader<StructOfStructs> {
@@ -643,6 +819,45 @@ class Stat {
String toString() {
return 'Stat{id: $id, val: $val, count: $count}';
}
+
+ StatT unpack() => StatT(
+ id: id,
+ val: val,
+ count: count);
+
+ static int pack(fb.Builder fbBuilder, StatT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class StatT {
+ String id;
+ int val;
+ int count;
+
+ StatT({
+ this.id,
+ this.val,
+ this.count});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+ final int idOffset = fbBuilder.writeString(id);
+
+ fbBuilder.startTable();
+ if (idOffset != null) {
+ fbBuilder.addOffset(0, idOffset);
+ }
+ fbBuilder.addInt64(1, val);
+ fbBuilder.addUint16(2, count);
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'StatT{id: $id, val: $val, count: $count}';
+ }
}
class _StatReader extends fb.TableReader<Stat> {
@@ -738,6 +953,34 @@ class Referrable {
String toString() {
return 'Referrable{id: $id}';
}
+
+ ReferrableT unpack() => ReferrableT(
+ id: id);
+
+ static int pack(fb.Builder fbBuilder, ReferrableT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class ReferrableT {
+ int id;
+
+ ReferrableT({
+ this.id});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.startTable();
+ fbBuilder.addUint64(0, id);
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'ReferrableT{id: $id}';
+ }
}
class _ReferrableReader extends fb.TableReader<Referrable> {
@@ -887,6 +1130,362 @@ class Monster {
String toString() {
return 'Monster{pos: $pos, mana: $mana, hp: $hp, name: $name, inventory: $inventory, color: $color, testType: $testType, test: $test, test4: $test4, testarrayofstring: $testarrayofstring, testarrayoftables: $testarrayoftables, enemy: $enemy, testnestedflatbuffer: $testnestedflatbuffer, testempty: $testempty, testbool: $testbool, testhashs32Fnv1: $testhashs32Fnv1, testhashu32Fnv1: $testhashu32Fnv1, testhashs64Fnv1: $testhashs64Fnv1, testhashu64Fnv1: $testhashu64Fnv1, testhashs32Fnv1a: $testhashs32Fnv1a, testhashu32Fnv1a: $testhashu32Fnv1a, testhashs64Fnv1a: $testhashs64Fnv1a, testhashu64Fnv1a: $testhashu64Fnv1a, testarrayofbools: $testarrayofbools, testf: $testf, testf2: $testf2, testf3: $testf3, testarrayofstring2: $testarrayofstring2, testarrayofsortedstruct: $testarrayofsortedstruct, flex: $flex, test5: $test5, vectorOfLongs: $vectorOfLongs, vectorOfDoubles: $vectorOfDoubles, parentNamespaceTest: $parentNamespaceTest, vectorOfReferrables: $vectorOfReferrables, singleWeakReference: $singleWeakReference, vectorOfWeakReferences: $vectorOfWeakReferences, vectorOfStrongReferrables: $vectorOfStrongReferrables, coOwningReference: $coOwningReference, vectorOfCoOwningReferences: $vectorOfCoOwningReferences, nonOwningReference: $nonOwningReference, vectorOfNonOwningReferences: $vectorOfNonOwningReferences, anyUniqueType: $anyUniqueType, anyUnique: $anyUnique, anyAmbiguousType: $anyAmbiguousType, anyAmbiguous: $anyAmbiguous, vectorOfEnums: $vectorOfEnums, signedEnum: $signedEnum, testrequirednestedflatbuffer: $testrequirednestedflatbuffer, scalarKeySortedTables: $scalarKeySortedTables}';
}
+
+ MonsterT unpack() => MonsterT(
+ pos: pos?.unpack(),
+ mana: mana,
+ hp: hp,
+ name: name,
+ inventory: inventory,
+ color: color,
+ testType: testType,
+ test: test,
+ test4: test4?.map((e) => e.unpack())?.toList(),
+ testarrayofstring: testarrayofstring,
+ testarrayoftables: testarrayoftables?.map((e) => e.unpack())?.toList(),
+ enemy: enemy?.unpack(),
+ testnestedflatbuffer: testnestedflatbuffer,
+ testempty: testempty?.unpack(),
+ testbool: testbool,
+ testhashs32Fnv1: testhashs32Fnv1,
+ testhashu32Fnv1: testhashu32Fnv1,
+ testhashs64Fnv1: testhashs64Fnv1,
+ testhashu64Fnv1: testhashu64Fnv1,
+ testhashs32Fnv1a: testhashs32Fnv1a,
+ testhashu32Fnv1a: testhashu32Fnv1a,
+ testhashs64Fnv1a: testhashs64Fnv1a,
+ testhashu64Fnv1a: testhashu64Fnv1a,
+ testarrayofbools: testarrayofbools,
+ testf: testf,
+ testf2: testf2,
+ testf3: testf3,
+ testarrayofstring2: testarrayofstring2,
+ testarrayofsortedstruct: testarrayofsortedstruct?.map((e) => e.unpack())?.toList(),
+ flex: flex,
+ test5: test5?.map((e) => e.unpack())?.toList(),
+ vectorOfLongs: vectorOfLongs,
+ vectorOfDoubles: vectorOfDoubles,
+ parentNamespaceTest: parentNamespaceTest?.unpack(),
+ vectorOfReferrables: vectorOfReferrables?.map((e) => e.unpack())?.toList(),
+ singleWeakReference: singleWeakReference,
+ vectorOfWeakReferences: vectorOfWeakReferences,
+ vectorOfStrongReferrables: vectorOfStrongReferrables?.map((e) => e.unpack())?.toList(),
+ coOwningReference: coOwningReference,
+ vectorOfCoOwningReferences: vectorOfCoOwningReferences,
+ nonOwningReference: nonOwningReference,
+ vectorOfNonOwningReferences: vectorOfNonOwningReferences,
+ anyUniqueType: anyUniqueType,
+ anyUnique: anyUnique,
+ anyAmbiguousType: anyAmbiguousType,
+ anyAmbiguous: anyAmbiguous,
+ vectorOfEnums: vectorOfEnums,
+ signedEnum: signedEnum,
+ testrequirednestedflatbuffer: testrequirednestedflatbuffer,
+ scalarKeySortedTables: scalarKeySortedTables?.map((e) => e.unpack())?.toList());
+
+ static int pack(fb.Builder fbBuilder, MonsterT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+/// an example documentation comment: "monster object"
+class MonsterT {
+ Vec3T pos;
+ int mana;
+ int hp;
+ String name;
+ List<int> inventory;
+ Color color;
+ AnyTypeId testType;
+ dynamic test;
+ List<TestT> test4;
+ List<String> testarrayofstring;
+ /// an example documentation comment: this will end up in the generated code
+ /// multiline too
+ List<MonsterT> testarrayoftables;
+ MonsterT enemy;
+ List<int> testnestedflatbuffer;
+ StatT testempty;
+ bool testbool;
+ int testhashs32Fnv1;
+ int testhashu32Fnv1;
+ int testhashs64Fnv1;
+ int testhashu64Fnv1;
+ int testhashs32Fnv1a;
+ int testhashu32Fnv1a;
+ int testhashs64Fnv1a;
+ int testhashu64Fnv1a;
+ List<bool> testarrayofbools;
+ double testf;
+ double testf2;
+ double testf3;
+ List<String> testarrayofstring2;
+ List<AbilityT> testarrayofsortedstruct;
+ List<int> flex;
+ List<TestT> test5;
+ List<int> vectorOfLongs;
+ List<double> vectorOfDoubles;
+ my_game.InParentNamespaceT parentNamespaceTest;
+ List<ReferrableT> vectorOfReferrables;
+ int singleWeakReference;
+ List<int> vectorOfWeakReferences;
+ List<ReferrableT> vectorOfStrongReferrables;
+ int coOwningReference;
+ List<int> vectorOfCoOwningReferences;
+ int nonOwningReference;
+ List<int> vectorOfNonOwningReferences;
+ AnyUniqueAliasesTypeId anyUniqueType;
+ dynamic anyUnique;
+ AnyAmbiguousAliasesTypeId anyAmbiguousType;
+ dynamic anyAmbiguous;
+ List<Color> vectorOfEnums;
+ Race signedEnum;
+ List<int> testrequirednestedflatbuffer;
+ List<StatT> scalarKeySortedTables;
+
+ MonsterT({
+ this.pos,
+ this.mana,
+ this.hp,
+ this.name,
+ this.inventory,
+ this.color,
+ this.testType,
+ this.test,
+ this.test4,
+ this.testarrayofstring,
+ this.testarrayoftables,
+ this.enemy,
+ this.testnestedflatbuffer,
+ this.testempty,
+ this.testbool,
+ this.testhashs32Fnv1,
+ this.testhashu32Fnv1,
+ this.testhashs64Fnv1,
+ this.testhashu64Fnv1,
+ this.testhashs32Fnv1a,
+ this.testhashu32Fnv1a,
+ this.testhashs64Fnv1a,
+ this.testhashu64Fnv1a,
+ this.testarrayofbools,
+ this.testf,
+ this.testf2,
+ this.testf3,
+ this.testarrayofstring2,
+ this.testarrayofsortedstruct,
+ this.flex,
+ this.test5,
+ this.vectorOfLongs,
+ this.vectorOfDoubles,
+ this.parentNamespaceTest,
+ this.vectorOfReferrables,
+ this.singleWeakReference,
+ this.vectorOfWeakReferences,
+ this.vectorOfStrongReferrables,
+ this.coOwningReference,
+ this.vectorOfCoOwningReferences,
+ this.nonOwningReference,
+ this.vectorOfNonOwningReferences,
+ this.anyUniqueType,
+ this.anyUnique,
+ this.anyAmbiguousType,
+ this.anyAmbiguous,
+ this.vectorOfEnums,
+ this.signedEnum,
+ this.testrequirednestedflatbuffer,
+ this.scalarKeySortedTables});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+ final int nameOffset = fbBuilder.writeString(name);
+ final int inventoryOffset = inventory?.isNotEmpty == true
+ ? fbBuilder.writeListUint8(inventory)
+ : null;
+ final int testOffset = test?.pack(fbBuilder);
+ int test4Offset = null;
+ if (test4?.isNotEmpty == true) {
+ test4.forEach((e) => e.pack(fbBuilder));
+ test4Offset = fbBuilder.endStructVector(test4.length);
+ }
+ final int testarrayofstringOffset = testarrayofstring?.isNotEmpty == true
+ ? fbBuilder.writeList(testarrayofstring.map((b) => fbBuilder.writeString(b)).toList())
+ : null;
+ final int testarrayoftablesOffset = testarrayoftables?.isNotEmpty == true
+ ? fbBuilder.writeList(testarrayoftables.map((b) => b.pack(fbBuilder)).toList())
+ : null;
+ final int enemyOffset = enemy?.pack(fbBuilder);
+ final int testnestedflatbufferOffset = testnestedflatbuffer?.isNotEmpty == true
+ ? fbBuilder.writeListUint8(testnestedflatbuffer)
+ : null;
+ final int testemptyOffset = testempty?.pack(fbBuilder);
+ final int testarrayofboolsOffset = testarrayofbools?.isNotEmpty == true
+ ? fbBuilder.writeListBool(testarrayofbools)
+ : null;
+ final int testarrayofstring2Offset = testarrayofstring2?.isNotEmpty == true
+ ? fbBuilder.writeList(testarrayofstring2.map((b) => fbBuilder.writeString(b)).toList())
+ : null;
+ int testarrayofsortedstructOffset = null;
+ if (testarrayofsortedstruct?.isNotEmpty == true) {
+ testarrayofsortedstruct.forEach((e) => e.pack(fbBuilder));
+ testarrayofsortedstructOffset = fbBuilder.endStructVector(testarrayofsortedstruct.length);
+ }
+ final int flexOffset = flex?.isNotEmpty == true
+ ? fbBuilder.writeListUint8(flex)
+ : null;
+ int test5Offset = null;
+ if (test5?.isNotEmpty == true) {
+ test5.forEach((e) => e.pack(fbBuilder));
+ test5Offset = fbBuilder.endStructVector(test5.length);
+ }
+ final int vectorOfLongsOffset = vectorOfLongs?.isNotEmpty == true
+ ? fbBuilder.writeListInt64(vectorOfLongs)
+ : null;
+ final int vectorOfDoublesOffset = vectorOfDoubles?.isNotEmpty == true
+ ? fbBuilder.writeListFloat64(vectorOfDoubles)
+ : null;
+ final int parentNamespaceTestOffset = parentNamespaceTest?.pack(fbBuilder);
+ final int vectorOfReferrablesOffset = vectorOfReferrables?.isNotEmpty == true
+ ? fbBuilder.writeList(vectorOfReferrables.map((b) => b.pack(fbBuilder)).toList())
+ : null;
+ final int vectorOfWeakReferencesOffset = vectorOfWeakReferences?.isNotEmpty == true
+ ? fbBuilder.writeListUint64(vectorOfWeakReferences)
+ : null;
+ final int vectorOfStrongReferrablesOffset = vectorOfStrongReferrables?.isNotEmpty == true
+ ? fbBuilder.writeList(vectorOfStrongReferrables.map((b) => b.pack(fbBuilder)).toList())
+ : null;
+ final int vectorOfCoOwningReferencesOffset = vectorOfCoOwningReferences?.isNotEmpty == true
+ ? fbBuilder.writeListUint64(vectorOfCoOwningReferences)
+ : null;
+ final int vectorOfNonOwningReferencesOffset = vectorOfNonOwningReferences?.isNotEmpty == true
+ ? fbBuilder.writeListUint64(vectorOfNonOwningReferences)
+ : null;
+ final int anyUniqueOffset = anyUnique?.pack(fbBuilder);
+ final int anyAmbiguousOffset = anyAmbiguous?.pack(fbBuilder);
+ final int vectorOfEnumsOffset = vectorOfEnums?.isNotEmpty == true
+ ? fbBuilder.writeListUint8(vectorOfEnums.map((f) => f.value).toList())
+ : null;
+ final int testrequirednestedflatbufferOffset = testrequirednestedflatbuffer?.isNotEmpty == true
+ ? fbBuilder.writeListUint8(testrequirednestedflatbuffer)
+ : null;
+ final int scalarKeySortedTablesOffset = scalarKeySortedTables?.isNotEmpty == true
+ ? fbBuilder.writeList(scalarKeySortedTables.map((b) => b.pack(fbBuilder)).toList())
+ : null;
+
+ fbBuilder.startTable();
+ if (pos != null) {
+ fbBuilder.addStruct(0, pos.pack(fbBuilder));
+ }
+ fbBuilder.addInt16(1, mana);
+ fbBuilder.addInt16(2, hp);
+ if (nameOffset != null) {
+ fbBuilder.addOffset(3, nameOffset);
+ }
+ if (inventoryOffset != null) {
+ fbBuilder.addOffset(5, inventoryOffset);
+ }
+ fbBuilder.addUint8(6, color?.value);
+ fbBuilder.addUint8(7, testType?.value);
+ if (testOffset != null) {
+ fbBuilder.addOffset(8, testOffset);
+ }
+ if (test4Offset != null) {
+ fbBuilder.addOffset(9, test4Offset);
+ }
+ if (testarrayofstringOffset != null) {
+ fbBuilder.addOffset(10, testarrayofstringOffset);
+ }
+ if (testarrayoftablesOffset != null) {
+ fbBuilder.addOffset(11, testarrayoftablesOffset);
+ }
+ if (enemyOffset != null) {
+ fbBuilder.addOffset(12, enemyOffset);
+ }
+ if (testnestedflatbufferOffset != null) {
+ fbBuilder.addOffset(13, testnestedflatbufferOffset);
+ }
+ if (testemptyOffset != null) {
+ fbBuilder.addOffset(14, testemptyOffset);
+ }
+ fbBuilder.addBool(15, testbool);
+ fbBuilder.addInt32(16, testhashs32Fnv1);
+ fbBuilder.addUint32(17, testhashu32Fnv1);
+ fbBuilder.addInt64(18, testhashs64Fnv1);
+ fbBuilder.addUint64(19, testhashu64Fnv1);
+ fbBuilder.addInt32(20, testhashs32Fnv1a);
+ fbBuilder.addUint32(21, testhashu32Fnv1a);
+ fbBuilder.addInt64(22, testhashs64Fnv1a);
+ fbBuilder.addUint64(23, testhashu64Fnv1a);
+ if (testarrayofboolsOffset != null) {
+ fbBuilder.addOffset(24, testarrayofboolsOffset);
+ }
+ fbBuilder.addFloat32(25, testf);
+ fbBuilder.addFloat32(26, testf2);
+ fbBuilder.addFloat32(27, testf3);
+ if (testarrayofstring2Offset != null) {
+ fbBuilder.addOffset(28, testarrayofstring2Offset);
+ }
+ if (testarrayofsortedstructOffset != null) {
+ fbBuilder.addOffset(29, testarrayofsortedstructOffset);
+ }
+ if (flexOffset != null) {
+ fbBuilder.addOffset(30, flexOffset);
+ }
+ if (test5Offset != null) {
+ fbBuilder.addOffset(31, test5Offset);
+ }
+ if (vectorOfLongsOffset != null) {
+ fbBuilder.addOffset(32, vectorOfLongsOffset);
+ }
+ if (vectorOfDoublesOffset != null) {
+ fbBuilder.addOffset(33, vectorOfDoublesOffset);
+ }
+ if (parentNamespaceTestOffset != null) {
+ fbBuilder.addOffset(34, parentNamespaceTestOffset);
+ }
+ if (vectorOfReferrablesOffset != null) {
+ fbBuilder.addOffset(35, vectorOfReferrablesOffset);
+ }
+ fbBuilder.addUint64(36, singleWeakReference);
+ if (vectorOfWeakReferencesOffset != null) {
+ fbBuilder.addOffset(37, vectorOfWeakReferencesOffset);
+ }
+ if (vectorOfStrongReferrablesOffset != null) {
+ fbBuilder.addOffset(38, vectorOfStrongReferrablesOffset);
+ }
+ fbBuilder.addUint64(39, coOwningReference);
+ if (vectorOfCoOwningReferencesOffset != null) {
+ fbBuilder.addOffset(40, vectorOfCoOwningReferencesOffset);
+ }
+ fbBuilder.addUint64(41, nonOwningReference);
+ if (vectorOfNonOwningReferencesOffset != null) {
+ fbBuilder.addOffset(42, vectorOfNonOwningReferencesOffset);
+ }
+ fbBuilder.addUint8(43, anyUniqueType?.value);
+ if (anyUniqueOffset != null) {
+ fbBuilder.addOffset(44, anyUniqueOffset);
+ }
+ fbBuilder.addUint8(45, anyAmbiguousType?.value);
+ if (anyAmbiguousOffset != null) {
+ fbBuilder.addOffset(46, anyAmbiguousOffset);
+ }
+ if (vectorOfEnumsOffset != null) {
+ fbBuilder.addOffset(47, vectorOfEnumsOffset);
+ }
+ fbBuilder.addInt8(48, signedEnum?.value);
+ if (testrequirednestedflatbufferOffset != null) {
+ fbBuilder.addOffset(49, testrequirednestedflatbufferOffset);
+ }
+ if (scalarKeySortedTablesOffset != null) {
+ fbBuilder.addOffset(50, scalarKeySortedTablesOffset);
+ }
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'MonsterT{pos: $pos, mana: $mana, hp: $hp, name: $name, inventory: $inventory, color: $color, testType: $testType, test: $test, test4: $test4, testarrayofstring: $testarrayofstring, testarrayoftables: $testarrayoftables, enemy: $enemy, testnestedflatbuffer: $testnestedflatbuffer, testempty: $testempty, testbool: $testbool, testhashs32Fnv1: $testhashs32Fnv1, testhashu32Fnv1: $testhashu32Fnv1, testhashs64Fnv1: $testhashs64Fnv1, testhashu64Fnv1: $testhashu64Fnv1, testhashs32Fnv1a: $testhashs32Fnv1a, testhashu32Fnv1a: $testhashu32Fnv1a, testhashs64Fnv1a: $testhashs64Fnv1a, testhashu64Fnv1a: $testhashu64Fnv1a, testarrayofbools: $testarrayofbools, testf: $testf, testf2: $testf2, testf3: $testf3, testarrayofstring2: $testarrayofstring2, testarrayofsortedstruct: $testarrayofsortedstruct, flex: $flex, test5: $test5, vectorOfLongs: $vectorOfLongs, vectorOfDoubles: $vectorOfDoubles, parentNamespaceTest: $parentNamespaceTest, vectorOfReferrables: $vectorOfReferrables, singleWeakReference: $singleWeakReference, vectorOfWeakReferences: $vectorOfWeakReferences, vectorOfStrongReferrables: $vectorOfStrongReferrables, coOwningReference: $coOwningReference, vectorOfCoOwningReferences: $vectorOfCoOwningReferences, nonOwningReference: $nonOwningReference, vectorOfNonOwningReferences: $vectorOfNonOwningReferences, anyUniqueType: $anyUniqueType, anyUnique: $anyUnique, anyAmbiguousType: $anyAmbiguousType, anyAmbiguous: $anyAmbiguous, vectorOfEnums: $vectorOfEnums, signedEnum: $signedEnum, testrequirednestedflatbuffer: $testrequirednestedflatbuffer, scalarKeySortedTables: $scalarKeySortedTables}';
+ }
}
class _MonsterReader extends fb.TableReader<Monster> {
@@ -1333,7 +1932,7 @@ class MonsterObjectBuilder extends fb.ObjectBuilder {
final int anyUniqueOffset = _anyUnique?.getOrCreateOffset(fbBuilder);
final int anyAmbiguousOffset = _anyAmbiguous?.getOrCreateOffset(fbBuilder);
final int vectorOfEnumsOffset = _vectorOfEnums?.isNotEmpty == true
- ? fbBuilder.writeListUint8(_vectorOfEnums.map((f) => f.value))
+ ? fbBuilder.writeListUint8(_vectorOfEnums.map((f) => f.value).toList())
: null;
final int testrequirednestedflatbufferOffset = _testrequirednestedflatbuffer?.isNotEmpty == true
? fbBuilder.writeListUint8(_testrequirednestedflatbuffer)
@@ -1489,6 +2088,88 @@ class TypeAliases {
String toString() {
return 'TypeAliases{i8: $i8, u8: $u8, i16: $i16, u16: $u16, i32: $i32, u32: $u32, i64: $i64, u64: $u64, f32: $f32, f64: $f64, v8: $v8, vf64: $vf64}';
}
+
+ TypeAliasesT unpack() => TypeAliasesT(
+ i8: i8,
+ u8: u8,
+ i16: i16,
+ u16: u16,
+ i32: i32,
+ u32: u32,
+ i64: i64,
+ u64: u64,
+ f32: f32,
+ f64: f64,
+ v8: v8,
+ vf64: vf64);
+
+ static int pack(fb.Builder fbBuilder, TypeAliasesT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class TypeAliasesT {
+ int i8;
+ int u8;
+ int i16;
+ int u16;
+ int i32;
+ int u32;
+ int i64;
+ int u64;
+ double f32;
+ double f64;
+ List<int> v8;
+ List<double> vf64;
+
+ TypeAliasesT({
+ this.i8,
+ this.u8,
+ this.i16,
+ this.u16,
+ this.i32,
+ this.u32,
+ this.i64,
+ this.u64,
+ this.f32,
+ this.f64,
+ this.v8,
+ this.vf64});
+
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+ final int v8Offset = v8?.isNotEmpty == true
+ ? fbBuilder.writeListInt8(v8)
+ : null;
+ final int vf64Offset = vf64?.isNotEmpty == true
+ ? fbBuilder.writeListFloat64(vf64)
+ : null;
+
+ fbBuilder.startTable();
+ fbBuilder.addInt8(0, i8);
+ fbBuilder.addUint8(1, u8);
+ fbBuilder.addInt16(2, i16);
+ fbBuilder.addUint16(3, u16);
+ fbBuilder.addInt32(4, i32);
+ fbBuilder.addUint32(5, u32);
+ fbBuilder.addInt64(6, i64);
+ fbBuilder.addUint64(7, u64);
+ fbBuilder.addFloat32(8, f32);
+ fbBuilder.addFloat64(9, f64);
+ if (v8Offset != null) {
+ fbBuilder.addOffset(10, v8Offset);
+ }
+ if (vf64Offset != null) {
+ fbBuilder.addOffset(11, vf64Offset);
+ }
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'TypeAliasesT{i8: $i8, u8: $u8, i16: $i16, u16: $u16, i32: $i32, u32: $u32, i64: $i64, u64: $u64, f32: $f32, f64: $f64, v8: $v8, vf64: $vf64}';
+ }
}
class _TypeAliasesReader extends fb.TableReader<TypeAliases> {
diff --git a/dart/test/monster_test_my_game_generated.dart b/dart/test/monster_test_my_game_generated.dart
index abd538c4..d53550d1 100644
--- a/dart/test/monster_test_my_game_generated.dart
+++ b/dart/test/monster_test_my_game_generated.dart
@@ -26,6 +26,27 @@ class InParentNamespace {
String toString() {
return 'InParentNamespace{}';
}
+
+ InParentNamespaceT unpack() => InParentNamespaceT();
+
+ static int pack(fb.Builder fbBuilder, InParentNamespaceT object) {
+ if (object == null) return 0;
+ return object.pack(fbBuilder);
+ }
+}
+
+class InParentNamespaceT {
+ int pack(fb.Builder fbBuilder) {
+ assert(fbBuilder != null);
+
+ fbBuilder.startTable();
+ return fbBuilder.endTable();
+ }
+
+ @override
+ String toString() {
+ return 'InParentNamespaceT{}';
+ }
}
class _InParentNamespaceReader extends fb.TableReader<InParentNamespace> {