Commit e4c3bf3d authored by Maor Itzkovitch's avatar Maor Itzkovitch

fixed C# bytebuffer put methods

parent 7196c368
...@@ -35,13 +35,18 @@ namespace FlatBuffers ...@@ -35,13 +35,18 @@ namespace FlatBuffers
public byte[] Data { get { return _buffer; } } public byte[] Data { get { return _buffer; } }
public ByteBuffer(byte[] buffer) public ByteBuffer(byte[] buffer) : this(buffer, 0) { }
public ByteBuffer(byte[] buffer, int pos)
{ {
_buffer = buffer; _buffer = buffer;
_pos = 0; _pos = pos;
} }
public int Position { get { return _pos; } } public int Position {
get { return _pos; }
set { _pos = value; }
}
// Pre-allocated helper arrays for convertion. // Pre-allocated helper arrays for convertion.
private float[] floathelper = new[] { 0.0f }; private float[] floathelper = new[] { 0.0f };
...@@ -92,7 +97,6 @@ namespace FlatBuffers ...@@ -92,7 +97,6 @@ namespace FlatBuffers
_buffer[offset + count - 1 - i] = (byte)(data >> i * 8); _buffer[offset + count - 1 - i] = (byte)(data >> i * 8);
} }
} }
_pos = offset;
} }
protected ulong ReadLittleEndian(int offset, int count) protected ulong ReadLittleEndian(int offset, int count)
...@@ -129,14 +133,12 @@ namespace FlatBuffers ...@@ -129,14 +133,12 @@ namespace FlatBuffers
{ {
AssertOffsetAndLength(offset, sizeof(sbyte)); AssertOffsetAndLength(offset, sizeof(sbyte));
_buffer[offset] = (byte)value; _buffer[offset] = (byte)value;
_pos = offset;
} }
public void PutByte(int offset, byte value) public void PutByte(int offset, byte value)
{ {
AssertOffsetAndLength(offset, sizeof(byte)); AssertOffsetAndLength(offset, sizeof(byte));
_buffer[offset] = value; _buffer[offset] = value;
_pos = offset;
} }
// this method exists in order to conform with Java ByteBuffer standards // this method exists in order to conform with Java ByteBuffer standards
......
...@@ -75,8 +75,8 @@ namespace FlatBuffers ...@@ -75,8 +75,8 @@ namespace FlatBuffers
Buffer.BlockCopy(oldBuf, 0, newBuf, newBufSize - oldBufSize, Buffer.BlockCopy(oldBuf, 0, newBuf, newBufSize - oldBufSize,
oldBufSize); oldBufSize);
_bb = new ByteBuffer(newBuf, newBufSize);
_bb = new ByteBuffer(newBuf); System.Diagnostics.Debug.WriteLine(_bb.Position);
} }
// Prepare to write an element of `size` after `additional_bytes` // Prepare to write an element of `size` after `additional_bytes`
...@@ -359,6 +359,7 @@ namespace FlatBuffers ...@@ -359,6 +359,7 @@ namespace FlatBuffers
{ {
Prep(_minAlign, sizeof(int)); Prep(_minAlign, sizeof(int));
AddOffset(rootTable); AddOffset(rootTable);
_bb.Position = _space;
} }
public ByteBuffer DataBuffer { get { return _bb; } } public ByteBuffer DataBuffer { get { return _bb; } }
...@@ -387,7 +388,7 @@ namespace FlatBuffers ...@@ -387,7 +388,7 @@ namespace FlatBuffers
{ {
AddByte((byte)fileIdentifier[i]); AddByte((byte)fileIdentifier[i]);
} }
AddOffset(rootTable); Finish(rootTable);
} }
......
...@@ -65,7 +65,6 @@ namespace FlatBuffers.Test ...@@ -65,7 +65,6 @@ namespace FlatBuffers.Test
fbb.AddOffset(test1); fbb.AddOffset(test1);
var testArrayOfString = fbb.EndVector(); var testArrayOfString = fbb.EndVector();
Monster.StartMonster(fbb); Monster.StartMonster(fbb);
Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0, Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
Color.Green, (short)5, (sbyte)6)); Color.Green, (short)5, (sbyte)6));
...@@ -79,7 +78,7 @@ namespace FlatBuffers.Test ...@@ -79,7 +78,7 @@ namespace FlatBuffers.Test
Monster.AddTestbool(fbb, false); Monster.AddTestbool(fbb, false);
var mon = Monster.EndMonster(fbb); var mon = Monster.EndMonster(fbb);
fbb.Finish(mon); Monster.FinishMonsterBuffer(fbb, mon);
// Dump to output directory so we can inspect later, if needed // Dump to output directory so we can inspect later, if needed
using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset)) using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset))
...@@ -90,6 +89,32 @@ namespace FlatBuffers.Test ...@@ -90,6 +89,32 @@ namespace FlatBuffers.Test
// Now assert the buffer // Now assert the buffer
TestBuffer(fbb.DataBuffer); TestBuffer(fbb.DataBuffer);
//Attempt to mutate Monster fields and check whether the buffer has been mutated properly
// revert to original values after testing
Monster monster = Monster.GetRootAsMonster(fbb.DataBuffer);
// mana is optional and does not exist in the buffer so the mutation should fail
// the mana field should retain its default value
Assert.AreEqual(monster.MutateMana((short)10), false);
Assert.AreEqual(monster.Mana, (short)150);
// testType is an existing field and mutating it should succeed
Assert.AreEqual(monster.TestType, Any.Monster);
Assert.AreEqual(monster.MutateTestType(Any.NONE), true);
Assert.AreEqual(monster.TestType, Any.NONE);
Assert.AreEqual(monster.MutateTestType(Any.Monster), true);
Assert.AreEqual(monster.TestType, Any.Monster);
// get a struct field and edit one of its fields
Vec3 pos = monster.Pos;
Assert.AreEqual(pos.X, 1.0f);
pos.MutateX(55.0f);
Assert.AreEqual(pos.X, 55.0f);
pos.MutateX(1.0f);
Assert.AreEqual(pos.X, 1.0f);
TestBuffer(fbb.DataBuffer);
} }
private void TestBuffer(ByteBuffer bb) private void TestBuffer(ByteBuffer bb)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment