mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-28 12:38:06 +00:00
fixed C# bytebuffer put methods
This commit is contained in:
@@ -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
|
|||||||
_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
|
|||||||
{
|
{
|
||||||
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
|
|||||||
|
|
||||||
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
|
|||||||
{
|
{
|
||||||
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
|
|||||||
{
|
{
|
||||||
AddByte((byte)fileIdentifier[i]);
|
AddByte((byte)fileIdentifier[i]);
|
||||||
}
|
}
|
||||||
AddOffset(rootTable);
|
Finish(rootTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
|||||||
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
|
|||||||
|
|
||||||
// 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)
|
||||||
|
|||||||
Reference in New Issue
Block a user