mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-11 23:40:57 +00:00
Trimmed vtables of trailing zeroes.
This is something the format supports, but none of the builders were doing. Can save 10-20% on FlatBuffer binary size! Also fixed the Go tests. Change-Id: I616c56ce9bbcfcaee23aa24f0532fcb60b6a8c75 Tested: on Linux.
This commit is contained in:
@@ -205,11 +205,11 @@ namespace FlatBuffers.Test
|
||||
builder.EndObject();
|
||||
Assert.ArrayEqual(new byte[]
|
||||
{
|
||||
0, 0, 0, 0, 0, 0, // padding to 16 bytes
|
||||
6, 0, // vtable bytes
|
||||
// No padding.
|
||||
4, 0, // vtable bytes
|
||||
4, 0, // end of object from here
|
||||
0, 0, // entry 0 is empty (default value)
|
||||
6, 0, 0, 0, // int32 offset for start of vtable
|
||||
// entry 0 is not stored (trimmed end of vtable)
|
||||
4, 0, 0, 0, // int32 offset for start of vtable
|
||||
},
|
||||
builder.DataBuffer.Data);
|
||||
}
|
||||
|
||||
@@ -30,6 +30,9 @@ mkdir -p ${go_src}/github.com/google/flatbuffers/go
|
||||
mkdir -p ${go_src}/flatbuffers_test
|
||||
|
||||
cp -a MyGame/Example/*.go ./go_gen/src/MyGame/Example/
|
||||
# do not compile the gRPC generated files, which are not tested by go_test.go
|
||||
# below, but have their own test.
|
||||
rm ./go_gen/src/MyGame/Example/*_grpc.go
|
||||
cp -a ../go/* ./go_gen/src/github.com/google/flatbuffers/go
|
||||
cp -a ./go_test.go ./go_gen/src/flatbuffers_test/
|
||||
|
||||
|
||||
@@ -715,10 +715,10 @@ func CheckByteLayout(fail func(string, ...interface{})) {
|
||||
b.PrependBoolSlot(0, false, false)
|
||||
b.EndObject()
|
||||
check([]byte{
|
||||
6, 0, // vtable bytes
|
||||
4, 0, // vtable bytes
|
||||
4, 0, // end of object from here
|
||||
0, 0, // entry 1 is zero
|
||||
6, 0, 0, 0, // offset for start of vtable (int32)
|
||||
// entry 1 is zero and not stored.
|
||||
4, 0, 0, 0, // offset for start of vtable (int32)
|
||||
})
|
||||
|
||||
// test 10: vtable with one int16
|
||||
@@ -1085,7 +1085,6 @@ func CheckManualBuild(fail func(string, ...interface{})) ([]byte, flatbuffers.UO
|
||||
b.PrependByteSlot(7, 1, 0)
|
||||
b.PrependUOffsetTSlot(8, mon2, 0)
|
||||
b.PrependUOffsetTSlot(9, test4, 0)
|
||||
b.PrependUOffsetTSlot(9, test5, 0)
|
||||
mon := b.EndObject()
|
||||
|
||||
b.Finish(mon)
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -345,7 +345,7 @@ struct MonsterBuilder {
|
||||
}
|
||||
MonsterBuilder &operator=(const MonsterBuilder &);
|
||||
flatbuffers::Offset<Monster> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 0);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Monster>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -404,7 +404,7 @@ struct TestSimpleTableWithEnumBuilder {
|
||||
}
|
||||
TestSimpleTableWithEnumBuilder &operator=(const TestSimpleTableWithEnumBuilder &);
|
||||
flatbuffers::Offset<TestSimpleTableWithEnum> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 1);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TestSimpleTableWithEnum>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -487,7 +487,7 @@ struct StatBuilder {
|
||||
}
|
||||
StatBuilder &operator=(const StatBuilder &);
|
||||
flatbuffers::Offset<Stat> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 3);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Stat>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -1015,7 +1015,7 @@ struct MonsterBuilder {
|
||||
}
|
||||
MonsterBuilder &operator=(const MonsterBuilder &);
|
||||
flatbuffers::Offset<Monster> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 34);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Monster>(end);
|
||||
fbb_.Required(o, Monster::VT_NAME);
|
||||
return o;
|
||||
@@ -1352,7 +1352,7 @@ struct TypeAliasesBuilder {
|
||||
}
|
||||
TypeAliasesBuilder &operator=(const TypeAliasesBuilder &);
|
||||
flatbuffers::Offset<TypeAliases> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 12);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TypeAliases>(end);
|
||||
return o;
|
||||
}
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -105,7 +105,7 @@ struct TableInNestedNSBuilder {
|
||||
}
|
||||
TableInNestedNSBuilder &operator=(const TableInNestedNSBuilder &);
|
||||
flatbuffers::Offset<TableInNestedNS> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 1);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TableInNestedNS>(end);
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -76,7 +76,7 @@ struct TableInFirstNSBuilder {
|
||||
}
|
||||
TableInFirstNSBuilder &operator=(const TableInFirstNSBuilder &);
|
||||
flatbuffers::Offset<TableInFirstNS> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 3);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TableInFirstNS>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -140,7 +140,7 @@ struct TableInCBuilder {
|
||||
}
|
||||
TableInCBuilder &operator=(const TableInCBuilder &);
|
||||
flatbuffers::Offset<TableInC> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 2);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<TableInC>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -190,7 +190,7 @@ struct SecondTableInABuilder {
|
||||
}
|
||||
SecondTableInABuilder &operator=(const SecondTableInABuilder &);
|
||||
flatbuffers::Offset<SecondTableInA> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 1);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<SecondTableInA>(end);
|
||||
return o;
|
||||
}
|
||||
|
||||
@@ -490,10 +490,10 @@ class TestByteLayout(unittest.TestCase):
|
||||
b.PrependBoolSlot(0, False, False)
|
||||
b.EndObject()
|
||||
self.assertBuilderEquals(b, [
|
||||
6, 0, # vtable bytes
|
||||
4, 0, # vtable bytes
|
||||
4, 0, # end of object from here
|
||||
0, 0, # entry 1 is zero
|
||||
6, 0, 0, 0, # offset for start of vtable (int32)
|
||||
# entry 1 is zero and not stored
|
||||
4, 0, 0, 0, # offset for start of vtable (int32)
|
||||
])
|
||||
|
||||
def test_vtable_with_one_int16(self):
|
||||
|
||||
@@ -863,7 +863,7 @@ void FuzzTest1() {
|
||||
case 10: builder.AddElement<double >(off, double_val, 0); break;
|
||||
}
|
||||
}
|
||||
objects[i] = builder.EndTable(start, fields_per_object);
|
||||
objects[i] = builder.EndTable(start);
|
||||
}
|
||||
builder.PreAlign<flatbuffers::largest_scalar_t>(0); // Align whole buffer.
|
||||
|
||||
|
||||
@@ -196,7 +196,7 @@ struct AttackerBuilder {
|
||||
}
|
||||
AttackerBuilder &operator=(const AttackerBuilder &);
|
||||
flatbuffers::Offset<Attacker> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 1);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Attacker>(end);
|
||||
return o;
|
||||
}
|
||||
@@ -309,7 +309,7 @@ struct MovieBuilder {
|
||||
}
|
||||
MovieBuilder &operator=(const MovieBuilder &);
|
||||
flatbuffers::Offset<Movie> Finish() {
|
||||
const auto end = fbb_.EndTable(start_, 4);
|
||||
const auto end = fbb_.EndTable(start_);
|
||||
auto o = flatbuffers::Offset<Movie>(end);
|
||||
return o;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user