mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-23 10:10:01 +00:00
Support for required fields.
Change-Id: I560c7ca11b3d665eecafb528f3737b7e139ca9b0 Tested: on Linux and Windows.
This commit is contained in:
@@ -66,13 +66,13 @@
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="..\monsterdata_test.bin">
|
||||
<Link>Resources\monsterdata_test.bin</Link>
|
||||
<Content Include="..\monsterdata_test.mon">
|
||||
<Link>Resources\monsterdata_test.mon</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
|
||||
@@ -50,8 +50,9 @@ namespace FlatBuffers.Test
|
||||
}
|
||||
var inv = fbb.EndVector();
|
||||
|
||||
var fred = fbb.CreateString("Fred");
|
||||
Monster.StartMonster(fbb);
|
||||
Monster.AddHp(fbb, (short)20);
|
||||
Monster.AddName(fbb, fred);
|
||||
var mon2 = Monster.EndMonster(fbb);
|
||||
|
||||
Monster.StartTest4Vector(fbb, 2);
|
||||
@@ -83,7 +84,7 @@ namespace FlatBuffers.Test
|
||||
using (var ms = new MemoryStream(fbb.DataBuffer().Data, fbb.DataBuffer().position(), fbb.Offset()))
|
||||
{
|
||||
var data = ms.ToArray();
|
||||
File.WriteAllBytes(@"Resources/monsterdata_cstest.bin",data);
|
||||
File.WriteAllBytes(@"Resources/monsterdata_cstest.mon",data);
|
||||
}
|
||||
|
||||
// Now assert the buffer
|
||||
@@ -113,7 +114,7 @@ namespace FlatBuffers.Test
|
||||
|
||||
var monster2 = new Monster();
|
||||
Assert.IsTrue(monster.Test(monster2) != null);
|
||||
Assert.AreEqual(20, monster2.Hp());
|
||||
Assert.AreEqual("Fred", monster2.Name());
|
||||
|
||||
|
||||
Assert.AreEqual(5, monster.InventoryLength());
|
||||
@@ -130,7 +131,6 @@ namespace FlatBuffers.Test
|
||||
|
||||
Assert.AreEqual(100, test0.A() + test0.B() + test1.A() + test1.B());
|
||||
|
||||
|
||||
Assert.AreEqual(2, monster.TestarrayofstringLength());
|
||||
Assert.AreEqual("test1", monster.Testarrayofstring(0));
|
||||
Assert.AreEqual("test2", monster.Testarrayofstring(1));
|
||||
@@ -138,7 +138,7 @@ namespace FlatBuffers.Test
|
||||
|
||||
public void CanReadCppGeneratedWireFile()
|
||||
{
|
||||
var data = File.ReadAllBytes(@"Resources/monsterdata_test.bin");
|
||||
var data = File.ReadAllBytes(@"Resources/monsterdata_test.mon");
|
||||
var bb = new ByteBuffer(data);
|
||||
TestBuffer(bb);
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@ class JavaTest {
|
||||
// This file was generated from monsterdata_test.json
|
||||
|
||||
byte[] data = null;
|
||||
File file = new File("monsterdata_test.bin");
|
||||
File file = new File("monsterdata_test.mon");
|
||||
RandomAccessFile f = null;
|
||||
try {
|
||||
f = new RandomAccessFile(file, "r");
|
||||
@@ -55,8 +55,9 @@ class JavaTest {
|
||||
|
||||
int inv = Monster.createInventoryVector(fbb, new byte[] { 0, 1, 2, 3, 4 });
|
||||
|
||||
int fred = fbb.createString("Fred");
|
||||
Monster.startMonster(fbb);
|
||||
Monster.addHp(fbb, (short)20);
|
||||
Monster.addName(fbb, fred);
|
||||
int mon2 = Monster.endMonster(fbb);
|
||||
|
||||
Monster.startTest4Vector(fbb, 2);
|
||||
@@ -90,7 +91,7 @@ class JavaTest {
|
||||
|
||||
try {
|
||||
DataOutputStream os = new DataOutputStream(new FileOutputStream(
|
||||
"monsterdata_java_wire.bin"));
|
||||
"monsterdata_java_wire.mon"));
|
||||
os.write(fbb.dataBuffer().array(), fbb.dataBuffer().position(), fbb.offset());
|
||||
os.close();
|
||||
} catch(java.io.IOException e) {
|
||||
@@ -142,7 +143,7 @@ class JavaTest {
|
||||
TestEq(monster.testType(), (byte)Any.Monster);
|
||||
Monster monster2 = new Monster();
|
||||
TestEq(monster.test(monster2) != null, true);
|
||||
TestEq(monster2.hp(), (short)20);
|
||||
TestEq(monster2.name(), "Fred");
|
||||
|
||||
TestEq(monster.inventoryLength(), 5);
|
||||
int invsum = 0;
|
||||
|
||||
@@ -60,7 +60,11 @@ public class Monster : Table {
|
||||
public static int CreateTestnestedflatbufferVector(FlatBufferBuilder builder, byte[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddByte(data[i]); return builder.EndVector(); }
|
||||
public static void StartTestnestedflatbufferVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
|
||||
public static void AddTestempty(FlatBufferBuilder builder, int testemptyOffset) { builder.AddOffset(14, testemptyOffset, 0); }
|
||||
public static int EndMonster(FlatBufferBuilder builder) { return builder.EndObject(); }
|
||||
public static int EndMonster(FlatBufferBuilder builder) {
|
||||
int o = builder.EndObject();
|
||||
builder.Required(o, 10); // name
|
||||
return o;
|
||||
}
|
||||
public static void FinishMonsterBuffer(FlatBufferBuilder builder, int offset) { builder.Finish(offset, "MONS"); }
|
||||
};
|
||||
|
||||
|
||||
@@ -68,7 +68,11 @@ public class Monster extends Table {
|
||||
public static int createTestnestedflatbufferVector(FlatBufferBuilder builder, byte[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addByte(data[i]); return builder.endVector(); }
|
||||
public static void startTestnestedflatbufferVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
|
||||
public static void addTestempty(FlatBufferBuilder builder, int testemptyOffset) { builder.addOffset(14, testemptyOffset, 0); }
|
||||
public static int endMonster(FlatBufferBuilder builder) { return builder.endObject(); }
|
||||
public static int endMonster(FlatBufferBuilder builder) {
|
||||
int o = builder.endObject();
|
||||
builder.required(o, 10); // name
|
||||
return o;
|
||||
}
|
||||
public static void finishMonsterBuffer(FlatBufferBuilder builder, int offset) { builder.finish(offset, "MONS"); }
|
||||
};
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ table Monster {
|
||||
pos:Vec3 (id: 0);
|
||||
hp:short = 100 (id: 2);
|
||||
mana:short = 150 (id: 1);
|
||||
name:string (id: 3);
|
||||
name:string (id: 3, required);
|
||||
color:Color = Blue (id: 6);
|
||||
inventory:[ubyte] (id: 5);
|
||||
friendly:bool = false (deprecated, priority: 1, id: 4);
|
||||
|
||||
@@ -107,7 +107,7 @@ struct Monster : private flatbuffers::Table {
|
||||
VerifyField<Vec3>(verifier, 4 /* pos */) &&
|
||||
VerifyField<int16_t>(verifier, 6 /* mana */) &&
|
||||
VerifyField<int16_t>(verifier, 8 /* hp */) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, 10 /* name */) &&
|
||||
VerifyFieldRequired<flatbuffers::uoffset_t>(verifier, 10 /* name */) &&
|
||||
verifier.Verify(name()) &&
|
||||
VerifyField<flatbuffers::uoffset_t>(verifier, 14 /* inventory */) &&
|
||||
verifier.Verify(inventory()) &&
|
||||
@@ -152,7 +152,11 @@ struct MonsterBuilder {
|
||||
void add_testempty(flatbuffers::Offset<Monster> testempty) { fbb_.AddOffset(32, testempty); }
|
||||
MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
|
||||
MonsterBuilder &operator=(const MonsterBuilder &);
|
||||
flatbuffers::Offset<Monster> Finish() { return flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 15)); }
|
||||
flatbuffers::Offset<Monster> Finish() {
|
||||
auto o = flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 15));
|
||||
fbb_.Required(o, 10); // name
|
||||
return o;
|
||||
}
|
||||
};
|
||||
|
||||
inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder &_fbb,
|
||||
|
||||
Binary file not shown.
@@ -21,7 +21,7 @@
|
||||
],
|
||||
test_type: Monster,
|
||||
test: {
|
||||
hp: 20
|
||||
name: "Fred"
|
||||
},
|
||||
test4: [
|
||||
{
|
||||
@@ -36,7 +36,5 @@
|
||||
testarrayofstring: [
|
||||
"test1",
|
||||
"test2"
|
||||
],
|
||||
testempty: {
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
],
|
||||
test_type: Monster,
|
||||
test: {
|
||||
hp: 20
|
||||
name: "Fred"
|
||||
},
|
||||
test4: [
|
||||
{
|
||||
@@ -36,7 +36,5 @@
|
||||
testarrayofstring: [
|
||||
"test1",
|
||||
"test2"
|
||||
],
|
||||
testempty: {
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
BIN
tests/monsterdata_test.mon
Normal file
BIN
tests/monsterdata_test.mon
Normal file
Binary file not shown.
@@ -75,8 +75,9 @@ std::string CreateFlatBufferTest() {
|
||||
|
||||
// create monster with very few fields set:
|
||||
// (same functionality as CreateMonster below, but sets fields manually)
|
||||
auto fred = builder.CreateString("Fred");
|
||||
MonsterBuilder mb(builder);
|
||||
mb.add_hp(20);
|
||||
mb.add_name(fred);
|
||||
auto mloc2 = mb.Finish();
|
||||
|
||||
// Create an array of strings:
|
||||
@@ -144,7 +145,7 @@ void AccessFlatBufferTest(const std::string &flatbuf) {
|
||||
TEST_EQ(monster->test_type(), Any_Monster); // First make sure which it is.
|
||||
auto monster2 = reinterpret_cast<const Monster *>(monster->test());
|
||||
TEST_NOTNULL(monster2);
|
||||
TEST_EQ(monster2->hp(), 20);
|
||||
TEST_EQ(strcmp(monster2->name()->c_str(), "Fred"), 0);
|
||||
|
||||
// Example of accessing a vector of strings:
|
||||
auto vecofstrings = monster->testarrayofstring();
|
||||
@@ -156,7 +157,7 @@ void AccessFlatBufferTest(const std::string &flatbuf) {
|
||||
auto vecoftables = monster->testarrayoftables();
|
||||
TEST_EQ(vecoftables->Length(), 1U);
|
||||
for (auto it = vecoftables->begin(); it != vecoftables->end(); ++it)
|
||||
TEST_EQ(it->hp(), 20);
|
||||
TEST_EQ(strcmp(it->name()->c_str(), "Fred"), 0);
|
||||
|
||||
// Since Flatbuffers uses explicit mechanisms to override the default
|
||||
// compiler alignment, double check that the compiler indeed obeys them:
|
||||
|
||||
Reference in New Issue
Block a user