Switched C# accessors from classes to structs

This commit is contained in:
Wouter van Oortmerssen
2016-08-12 18:01:38 -07:00
parent d05d114523
commit 52ca75506a
32 changed files with 541 additions and 388 deletions

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -41,6 +41,9 @@
<Compile Include="..\..\net\FlatBuffers\ByteBuffer.cs">
<Link>FlatBuffers\ByteBuffer.cs</Link>
</Compile>
<Compile Include="..\..\net\FlatBuffers\IFlatbufferObject .cs">
<Link>FlatBuffers\IFlatbufferObject .cs</Link>
</Compile>
<Compile Include="..\..\net\FlatBuffers\Offset.cs">
<Link>FlatBuffers\Offset.cs</Link>
</Compile>

View File

@@ -51,7 +51,7 @@ namespace FlatBuffers.Test
Monster.AddName(fbb, names[2]);
off[2] = Monster.EndMonster(fbb);
var sortMons = Monster.CreateMySortedVectorOfTables(fbb, off);
// We set up the same values as monsterdata.json:
var str = fbb.CreateString("MyMonster");
@@ -116,12 +116,12 @@ namespace FlatBuffers.Test
// the mana field should retain its default value
Assert.AreEqual(monster.MutateMana((short)10), false);
Assert.AreEqual(monster.Mana, (short)150);
// Accessing a vector of sorted by the key tables
Assert.AreEqual(monster.GetTestarrayoftables(0).Name, "Barney");
Assert.AreEqual(monster.GetTestarrayoftables(1).Name, "Frodo");
Assert.AreEqual(monster.GetTestarrayoftables(2).Name, "Wilma");
Assert.AreEqual(monster.Testarrayoftables(0).Value.Name, "Barney");
Assert.AreEqual(monster.Testarrayoftables(1).Value.Name, "Frodo");
Assert.AreEqual(monster.Testarrayoftables(2).Value.Name, "Wilma");
// Example of searching for a table by the key
Assert.IsTrue(Monster.LookupByKey(sortMons, "Frodo", fbb.DataBuffer) != null);
Assert.IsTrue(Monster.LookupByKey(sortMons, "Barney", fbb.DataBuffer) != null);
@@ -143,7 +143,7 @@ namespace FlatBuffers.Test
for (int i = 0; i < monster.InventoryLength; i++)
{
Assert.AreEqual(monster.GetInventory(i), i + 1);
Assert.AreEqual(monster.Inventory(i), i + 1);
}
//reverse mutation
@@ -154,7 +154,7 @@ namespace FlatBuffers.Test
Assert.AreEqual(monster.MutateInventory(4, 4), true);
// get a struct field and edit one of its fields
Vec3 pos = monster.Pos;
Vec3 pos = (Vec3)monster.Pos;
Assert.AreEqual(pos.X, 1.0f);
pos.MutateX(55.0f);
Assert.AreEqual(pos.X, 55.0f);
@@ -172,21 +172,20 @@ namespace FlatBuffers.Test
Assert.AreEqual(150, monster.Mana);
Assert.AreEqual("MyMonster", monster.Name);
var pos = monster.Pos;
var pos = monster.Pos.Value;
Assert.AreEqual(1.0f, pos.X);
Assert.AreEqual(2.0f, pos.Y);
Assert.AreEqual(3.0f, pos.Z);
Assert.AreEqual(3.0f, pos.Test1);
Assert.AreEqual(Color.Green, pos.Test2);
var t = pos.Test3;
var t = (MyGame.Example.Test)pos.Test3;
Assert.AreEqual((short)5, t.A);
Assert.AreEqual((sbyte)6, t.B);
Assert.AreEqual(Any.Monster, monster.TestType);
var monster2 = new Monster();
Assert.IsTrue(monster.GetTest(monster2) != null);
var monster2 = monster.Test<Monster>().Value;
Assert.AreEqual("Fred", monster2.Name);
@@ -194,19 +193,19 @@ namespace FlatBuffers.Test
var invsum = 0;
for (var i = 0; i < monster.InventoryLength; i++)
{
invsum += monster.GetInventory(i);
invsum += monster.Inventory(i);
}
Assert.AreEqual(10, invsum);
var test0 = monster.GetTest4(0);
var test1 = monster.GetTest4(1);
var test0 = monster.Test4(0).Value;
var test1 = monster.Test4(1).Value;
Assert.AreEqual(2, monster.Test4Length);
Assert.AreEqual(100, test0.A + test0.B + test1.A + test1.B);
Assert.AreEqual(2, monster.TestarrayofstringLength);
Assert.AreEqual("test1", monster.GetTestarrayofstring(0));
Assert.AreEqual("test2", monster.GetTestarrayofstring(1));
Assert.AreEqual("test1", monster.Testarrayofstring(0));
Assert.AreEqual("test2", monster.Testarrayofstring(1));
Assert.AreEqual(false, monster.Testbool);
@@ -269,10 +268,10 @@ namespace FlatBuffers.Test
Monster.AddTestnestedflatbuffer(fbb2, nestedBuffer);
var monster = Monster.EndMonster(fbb2);
Monster.FinishMonsterBuffer(fbb2, monster);
// Now test the data extracted from the nested buffer
var mons = Monster.GetRootAsMonster(fbb2.DataBuffer);
var nestedMonster = mons.TestnestedflatbufferAsMonster();
var nestedMonster = mons.GetTestnestedflatbufferAsMonster().Value;
Assert.AreEqual(nestedMonsterMana, nestedMonster.Mana);
Assert.AreEqual(nestedMonsterHp, nestedMonster.Hp);

View File

@@ -19,133 +19,135 @@ namespace FlatBuffers.Test
/// <summary>
/// A test Table object that gives easy access to the slot data
/// </summary>
internal class TestTable : Table
internal struct TestTable
{
Table t;
public TestTable(ByteBuffer bb, int pos)
{
base.bb = bb;
base.bb_pos = pos;
t.bb = bb;
t.bb_pos = pos;
}
public bool GetSlot(int slot, bool def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetSbyte(bb_pos + off) != 0;
return t.bb.GetSbyte(t.bb_pos + off) != 0;
}
public sbyte GetSlot(int slot, sbyte def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetSbyte(bb_pos + off);
return t.bb.GetSbyte(t.bb_pos + off);
}
public byte GetSlot(int slot, byte def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.Get(bb_pos + off);
return t.bb.Get(t.bb_pos + off);
}
public short GetSlot(int slot, short def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetShort(bb_pos + off);
return t.bb.GetShort(t.bb_pos + off);
}
public ushort GetSlot(int slot, ushort def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetUshort(bb_pos + off);
return t.bb.GetUshort(t.bb_pos + off);
}
public int GetSlot(int slot, int def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetInt(bb_pos + off);
return t.bb.GetInt(t.bb_pos + off);
}
public uint GetSlot(int slot, uint def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetUint(bb_pos + off);
return t.bb.GetUint(t.bb_pos + off);
}
public long GetSlot(int slot, long def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetLong(bb_pos + off);
return t.bb.GetLong(t.bb_pos + off);
}
public ulong GetSlot(int slot, ulong def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetUlong(bb_pos + off);
return t.bb.GetUlong(t.bb_pos + off);
}
public float GetSlot(int slot, float def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetFloat(bb_pos + off);
return t.bb.GetFloat(t.bb_pos + off);
}
public double GetSlot(int slot, double def)
{
var off = base.__offset(slot);
var off = t.__offset(slot);
if (off == 0)
{
return def;
}
return bb.GetDouble(bb_pos + off);
return t.bb.GetDouble(t.bb_pos + off);
}
}
}
}