Commit 2706381e authored by Kevin Fort's avatar Kevin Fort Committed by Wouter van Oortmerssen

Add element size parameter to __vector_as_arraysegment [c#] (#5512)

* Add element size parameter to __vector_as_arraysegment

Add element size parameter to __vector_as_arraysegment fixing issue where VectorAsBytes returns incorrect size span for multibyte element types.

* Update codegen

Update codegen and Table to return typed span.

* update test files

update test files
parent b5560fcd
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
using System; using System;
using System.Text; using System.Text;
using System.Runtime.InteropServices;
namespace FlatBuffers namespace FlatBuffers
{ {
...@@ -89,17 +90,23 @@ namespace FlatBuffers ...@@ -89,17 +90,23 @@ namespace FlatBuffers
// Get the data of a vector whoses offset is stored at "offset" in this object as an // Get the data of a vector whoses offset is stored at "offset" in this object as an
// Spant<byte>. If the vector is not present in the ByteBuffer, // Spant<byte>. If the vector is not present in the ByteBuffer,
// then an empty span will be returned. // then an empty span will be returned.
public Span<byte> __vector_as_span(int offset) public Span<T> __vector_as_span<T>(int offset, int elementSize) where T : struct
{ {
if (!BitConverter.IsLittleEndian)
{
throw new NotSupportedException("Getting typed span on a Big Endian " +
"system is not support");
}
var o = this.__offset(offset); var o = this.__offset(offset);
if (0 == o) if (0 == o)
{ {
return new Span<byte>(); return new Span<T>();
} }
var pos = this.__vector(o); var pos = this.__vector(o);
var len = this.__vector_len(o); var len = this.__vector_len(o);
return bb.ToSpan(pos, len); return MemoryMarshal.Cast<byte, T>(bb.ToSpan(pos, len * elementSize));
} }
#else #else
// Get the data of a vector whoses offset is stored at "offset" in this object as an // Get the data of a vector whoses offset is stored at "offset" in this object as an
......
...@@ -1230,18 +1230,19 @@ class GeneralGenerator : public BaseGenerator { ...@@ -1230,18 +1230,19 @@ class GeneralGenerator : public BaseGenerator {
break; break;
case IDLOptions::kCSharp: case IDLOptions::kCSharp:
code += "#if ENABLE_SPAN_T\n"; code += "#if ENABLE_SPAN_T\n";
code += " public Span<byte> Get"; code += " public Span<" + GenTypeBasic(field.value.type.VectorType()) + "> Get";
code += MakeCamel(field.name, lang_.first_camel_upper); code += MakeCamel(field.name, lang_.first_camel_upper);
code += "Bytes() { return "; code += "Bytes() { return ";
code += lang_.accessor_prefix + "__vector_as_span("; code += lang_.accessor_prefix + "__vector_as_span<"+ GenTypeBasic(field.value.type.VectorType()) +">(";
code += NumToString(field.value.offset); code += NumToString(field.value.offset);
code += ", " + NumToString(SizeOf(field.value.type.VectorType().base_type));
code += "); }\n"; code += "); }\n";
code += "#else\n"; code += "#else\n";
code += " public ArraySegment<byte>? Get"; code += " public ArraySegment<byte>? Get";
code += MakeCamel(field.name, lang_.first_camel_upper); code += MakeCamel(field.name, lang_.first_camel_upper);
code += "Bytes() { return "; code += "Bytes() { return ";
code += lang_.accessor_prefix + "__vector_as_arraysegment("; code += lang_.accessor_prefix + "__vector_as_arraysegment(";
code += NumToString(field.value.offset); code += NumToString(field.value.offset);
code += "); }\n"; code += "); }\n";
code += "#endif\n"; code += "#endif\n";
......
...@@ -260,6 +260,12 @@ namespace FlatBuffers.Test ...@@ -260,6 +260,12 @@ namespace FlatBuffers.Test
{ {
Assert.IsTrue(monster.GetTestarrayofboolsBytes().Length != 0); Assert.IsTrue(monster.GetTestarrayofboolsBytes().Length != 0);
} }
var longArrayBytes = monster.GetVectorOfLongsBytes();
Assert.IsTrue(monster.VectorOfLongsLength * 8 == longArrayBytes.Length);
var doubleArrayBytes = monster.GetVectorOfDoublesBytes();
Assert.IsTrue(monster.VectorOfDoublesLength * 8 == doubleArrayBytes.Length);
#else #else
var nameBytes = monster.GetNameBytes().Value; var nameBytes = monster.GetNameBytes().Value;
Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.Array, nameBytes.Offset, nameBytes.Count)); Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.Array, nameBytes.Offset, nameBytes.Count));
...@@ -273,7 +279,7 @@ namespace FlatBuffers.Test ...@@ -273,7 +279,7 @@ namespace FlatBuffers.Test
Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue); Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue);
} }
#endif #endif
} }
[FlatBuffersTestMethod] [FlatBuffersTestMethod]
public void CanReadCppGeneratedWireFile() public void CanReadCppGeneratedWireFile()
......
...@@ -27,7 +27,7 @@ public struct Monster : IFlatbufferObject ...@@ -27,7 +27,7 @@ public struct Monster : IFlatbufferObject
public bool MutateHp(short hp) { int o = __p.__offset(8); if (o != 0) { __p.bb.PutShort(o + __p.bb_pos, hp); return true; } else { return false; } } public bool MutateHp(short hp) { int o = __p.__offset(8); if (o != 0) { __p.bb.PutShort(o + __p.bb_pos, hp); return true; } else { return false; } }
public string Name { get { int o = __p.__offset(10); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } } public string Name { get { int o = __p.__offset(10); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetNameBytes() { return __p.__vector_as_span(10); } public Span<byte> GetNameBytes() { return __p.__vector_as_span<byte>(10, 1); }
#else #else
public ArraySegment<byte>? GetNameBytes() { return __p.__vector_as_arraysegment(10); } public ArraySegment<byte>? GetNameBytes() { return __p.__vector_as_arraysegment(10); }
#endif #endif
...@@ -35,7 +35,7 @@ public struct Monster : IFlatbufferObject ...@@ -35,7 +35,7 @@ public struct Monster : IFlatbufferObject
public byte Inventory(int j) { int o = __p.__offset(14); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; } public byte Inventory(int j) { int o = __p.__offset(14); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; }
public int InventoryLength { get { int o = __p.__offset(14); return o != 0 ? __p.__vector_len(o) : 0; } } public int InventoryLength { get { int o = __p.__offset(14); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetInventoryBytes() { return __p.__vector_as_span(14); } public Span<byte> GetInventoryBytes() { return __p.__vector_as_span<byte>(14, 1); }
#else #else
public ArraySegment<byte>? GetInventoryBytes() { return __p.__vector_as_arraysegment(14); } public ArraySegment<byte>? GetInventoryBytes() { return __p.__vector_as_arraysegment(14); }
#endif #endif
...@@ -59,7 +59,7 @@ public struct Monster : IFlatbufferObject ...@@ -59,7 +59,7 @@ public struct Monster : IFlatbufferObject
public byte Testnestedflatbuffer(int j) { int o = __p.__offset(30); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; } public byte Testnestedflatbuffer(int j) { int o = __p.__offset(30); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; }
public int TestnestedflatbufferLength { get { int o = __p.__offset(30); return o != 0 ? __p.__vector_len(o) : 0; } } public int TestnestedflatbufferLength { get { int o = __p.__offset(30); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetTestnestedflatbufferBytes() { return __p.__vector_as_span(30); } public Span<byte> GetTestnestedflatbufferBytes() { return __p.__vector_as_span<byte>(30, 1); }
#else #else
public ArraySegment<byte>? GetTestnestedflatbufferBytes() { return __p.__vector_as_arraysegment(30); } public ArraySegment<byte>? GetTestnestedflatbufferBytes() { return __p.__vector_as_arraysegment(30); }
#endif #endif
...@@ -88,7 +88,7 @@ public struct Monster : IFlatbufferObject ...@@ -88,7 +88,7 @@ public struct Monster : IFlatbufferObject
public bool Testarrayofbools(int j) { int o = __p.__offset(52); return o != 0 ? 0!=__p.bb.Get(__p.__vector(o) + j * 1) : false; } public bool Testarrayofbools(int j) { int o = __p.__offset(52); return o != 0 ? 0!=__p.bb.Get(__p.__vector(o) + j * 1) : false; }
public int TestarrayofboolsLength { get { int o = __p.__offset(52); return o != 0 ? __p.__vector_len(o) : 0; } } public int TestarrayofboolsLength { get { int o = __p.__offset(52); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetTestarrayofboolsBytes() { return __p.__vector_as_span(52); } public Span<bool> GetTestarrayofboolsBytes() { return __p.__vector_as_span<bool>(52, 1); }
#else #else
public ArraySegment<byte>? GetTestarrayofboolsBytes() { return __p.__vector_as_arraysegment(52); } public ArraySegment<byte>? GetTestarrayofboolsBytes() { return __p.__vector_as_arraysegment(52); }
#endif #endif
...@@ -107,7 +107,7 @@ public struct Monster : IFlatbufferObject ...@@ -107,7 +107,7 @@ public struct Monster : IFlatbufferObject
public byte Flex(int j) { int o = __p.__offset(64); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; } public byte Flex(int j) { int o = __p.__offset(64); return o != 0 ? __p.bb.Get(__p.__vector(o) + j * 1) : (byte)0; }
public int FlexLength { get { int o = __p.__offset(64); return o != 0 ? __p.__vector_len(o) : 0; } } public int FlexLength { get { int o = __p.__offset(64); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetFlexBytes() { return __p.__vector_as_span(64); } public Span<byte> GetFlexBytes() { return __p.__vector_as_span<byte>(64, 1); }
#else #else
public ArraySegment<byte>? GetFlexBytes() { return __p.__vector_as_arraysegment(64); } public ArraySegment<byte>? GetFlexBytes() { return __p.__vector_as_arraysegment(64); }
#endif #endif
...@@ -118,7 +118,7 @@ public struct Monster : IFlatbufferObject ...@@ -118,7 +118,7 @@ public struct Monster : IFlatbufferObject
public long VectorOfLongs(int j) { int o = __p.__offset(68); return o != 0 ? __p.bb.GetLong(__p.__vector(o) + j * 8) : (long)0; } public long VectorOfLongs(int j) { int o = __p.__offset(68); return o != 0 ? __p.bb.GetLong(__p.__vector(o) + j * 8) : (long)0; }
public int VectorOfLongsLength { get { int o = __p.__offset(68); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfLongsLength { get { int o = __p.__offset(68); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfLongsBytes() { return __p.__vector_as_span(68); } public Span<long> GetVectorOfLongsBytes() { return __p.__vector_as_span<long>(68, 8); }
#else #else
public ArraySegment<byte>? GetVectorOfLongsBytes() { return __p.__vector_as_arraysegment(68); } public ArraySegment<byte>? GetVectorOfLongsBytes() { return __p.__vector_as_arraysegment(68); }
#endif #endif
...@@ -127,7 +127,7 @@ public struct Monster : IFlatbufferObject ...@@ -127,7 +127,7 @@ public struct Monster : IFlatbufferObject
public double VectorOfDoubles(int j) { int o = __p.__offset(70); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; } public double VectorOfDoubles(int j) { int o = __p.__offset(70); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
public int VectorOfDoublesLength { get { int o = __p.__offset(70); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfDoublesLength { get { int o = __p.__offset(70); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfDoublesBytes() { return __p.__vector_as_span(70); } public Span<double> GetVectorOfDoublesBytes() { return __p.__vector_as_span<double>(70, 8); }
#else #else
public ArraySegment<byte>? GetVectorOfDoublesBytes() { return __p.__vector_as_arraysegment(70); } public ArraySegment<byte>? GetVectorOfDoublesBytes() { return __p.__vector_as_arraysegment(70); }
#endif #endif
...@@ -142,7 +142,7 @@ public struct Monster : IFlatbufferObject ...@@ -142,7 +142,7 @@ public struct Monster : IFlatbufferObject
public ulong VectorOfWeakReferences(int j) { int o = __p.__offset(78); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; } public ulong VectorOfWeakReferences(int j) { int o = __p.__offset(78); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; }
public int VectorOfWeakReferencesLength { get { int o = __p.__offset(78); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfWeakReferencesLength { get { int o = __p.__offset(78); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfWeakReferencesBytes() { return __p.__vector_as_span(78); } public Span<ulong> GetVectorOfWeakReferencesBytes() { return __p.__vector_as_span<ulong>(78, 8); }
#else #else
public ArraySegment<byte>? GetVectorOfWeakReferencesBytes() { return __p.__vector_as_arraysegment(78); } public ArraySegment<byte>? GetVectorOfWeakReferencesBytes() { return __p.__vector_as_arraysegment(78); }
#endif #endif
...@@ -156,7 +156,7 @@ public struct Monster : IFlatbufferObject ...@@ -156,7 +156,7 @@ public struct Monster : IFlatbufferObject
public ulong VectorOfCoOwningReferences(int j) { int o = __p.__offset(84); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; } public ulong VectorOfCoOwningReferences(int j) { int o = __p.__offset(84); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; }
public int VectorOfCoOwningReferencesLength { get { int o = __p.__offset(84); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfCoOwningReferencesLength { get { int o = __p.__offset(84); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfCoOwningReferencesBytes() { return __p.__vector_as_span(84); } public Span<ulong> GetVectorOfCoOwningReferencesBytes() { return __p.__vector_as_span<ulong>(84, 8); }
#else #else
public ArraySegment<byte>? GetVectorOfCoOwningReferencesBytes() { return __p.__vector_as_arraysegment(84); } public ArraySegment<byte>? GetVectorOfCoOwningReferencesBytes() { return __p.__vector_as_arraysegment(84); }
#endif #endif
...@@ -167,7 +167,7 @@ public struct Monster : IFlatbufferObject ...@@ -167,7 +167,7 @@ public struct Monster : IFlatbufferObject
public ulong VectorOfNonOwningReferences(int j) { int o = __p.__offset(88); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; } public ulong VectorOfNonOwningReferences(int j) { int o = __p.__offset(88); return o != 0 ? __p.bb.GetUlong(__p.__vector(o) + j * 8) : (ulong)0; }
public int VectorOfNonOwningReferencesLength { get { int o = __p.__offset(88); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfNonOwningReferencesLength { get { int o = __p.__offset(88); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfNonOwningReferencesBytes() { return __p.__vector_as_span(88); } public Span<ulong> GetVectorOfNonOwningReferencesBytes() { return __p.__vector_as_span<ulong>(88, 8); }
#else #else
public ArraySegment<byte>? GetVectorOfNonOwningReferencesBytes() { return __p.__vector_as_arraysegment(88); } public ArraySegment<byte>? GetVectorOfNonOwningReferencesBytes() { return __p.__vector_as_arraysegment(88); }
#endif #endif
...@@ -182,7 +182,7 @@ public struct Monster : IFlatbufferObject ...@@ -182,7 +182,7 @@ public struct Monster : IFlatbufferObject
public MyGame.Example.Color VectorOfEnums(int j) { int o = __p.__offset(98); return o != 0 ? (MyGame.Example.Color)__p.bb.Get(__p.__vector(o) + j * 1) : (MyGame.Example.Color)0; } public MyGame.Example.Color VectorOfEnums(int j) { int o = __p.__offset(98); return o != 0 ? (MyGame.Example.Color)__p.bb.Get(__p.__vector(o) + j * 1) : (MyGame.Example.Color)0; }
public int VectorOfEnumsLength { get { int o = __p.__offset(98); return o != 0 ? __p.__vector_len(o) : 0; } } public int VectorOfEnumsLength { get { int o = __p.__offset(98); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVectorOfEnumsBytes() { return __p.__vector_as_span(98); } public Span<MyGame.Example.Color> GetVectorOfEnumsBytes() { return __p.__vector_as_span<MyGame.Example.Color>(98, 1); }
#else #else
public ArraySegment<byte>? GetVectorOfEnumsBytes() { return __p.__vector_as_arraysegment(98); } public ArraySegment<byte>? GetVectorOfEnumsBytes() { return __p.__vector_as_arraysegment(98); }
#endif #endif
......
...@@ -20,7 +20,7 @@ public struct Stat : IFlatbufferObject ...@@ -20,7 +20,7 @@ public struct Stat : IFlatbufferObject
public string Id { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } } public string Id { get { int o = __p.__offset(4); return o != 0 ? __p.__string(o + __p.bb_pos) : null; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetIdBytes() { return __p.__vector_as_span(4); } public Span<byte> GetIdBytes() { return __p.__vector_as_span<byte>(4, 1); }
#else #else
public ArraySegment<byte>? GetIdBytes() { return __p.__vector_as_arraysegment(4); } public ArraySegment<byte>? GetIdBytes() { return __p.__vector_as_arraysegment(4); }
#endif #endif
......
...@@ -41,7 +41,7 @@ public struct TypeAliases : IFlatbufferObject ...@@ -41,7 +41,7 @@ public struct TypeAliases : IFlatbufferObject
public sbyte V8(int j) { int o = __p.__offset(24); return o != 0 ? __p.bb.GetSbyte(__p.__vector(o) + j * 1) : (sbyte)0; } public sbyte V8(int j) { int o = __p.__offset(24); return o != 0 ? __p.bb.GetSbyte(__p.__vector(o) + j * 1) : (sbyte)0; }
public int V8Length { get { int o = __p.__offset(24); return o != 0 ? __p.__vector_len(o) : 0; } } public int V8Length { get { int o = __p.__offset(24); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetV8Bytes() { return __p.__vector_as_span(24); } public Span<sbyte> GetV8Bytes() { return __p.__vector_as_span<sbyte>(24, 1); }
#else #else
public ArraySegment<byte>? GetV8Bytes() { return __p.__vector_as_arraysegment(24); } public ArraySegment<byte>? GetV8Bytes() { return __p.__vector_as_arraysegment(24); }
#endif #endif
...@@ -50,7 +50,7 @@ public struct TypeAliases : IFlatbufferObject ...@@ -50,7 +50,7 @@ public struct TypeAliases : IFlatbufferObject
public double Vf64(int j) { int o = __p.__offset(26); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; } public double Vf64(int j) { int o = __p.__offset(26); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
public int Vf64Length { get { int o = __p.__offset(26); return o != 0 ? __p.__vector_len(o) : 0; } } public int Vf64Length { get { int o = __p.__offset(26); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetVf64Bytes() { return __p.__vector_as_span(26); } public Span<double> GetVf64Bytes() { return __p.__vector_as_span<double>(26, 8); }
#else #else
public ArraySegment<byte>? GetVf64Bytes() { return __p.__vector_as_arraysegment(26); } public ArraySegment<byte>? GetVf64Bytes() { return __p.__vector_as_arraysegment(26); }
#endif #endif
......
...@@ -38,7 +38,7 @@ public struct MonsterExtra : IFlatbufferObject ...@@ -38,7 +38,7 @@ public struct MonsterExtra : IFlatbufferObject
public double Dvec(int j) { int o = __p.__offset(20); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; } public double Dvec(int j) { int o = __p.__offset(20); return o != 0 ? __p.bb.GetDouble(__p.__vector(o) + j * 8) : (double)0; }
public int DvecLength { get { int o = __p.__offset(20); return o != 0 ? __p.__vector_len(o) : 0; } } public int DvecLength { get { int o = __p.__offset(20); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetDvecBytes() { return __p.__vector_as_span(20); } public Span<double> GetDvecBytes() { return __p.__vector_as_span<double>(20, 8); }
#else #else
public ArraySegment<byte>? GetDvecBytes() { return __p.__vector_as_arraysegment(20); } public ArraySegment<byte>? GetDvecBytes() { return __p.__vector_as_arraysegment(20); }
#endif #endif
...@@ -47,7 +47,7 @@ public struct MonsterExtra : IFlatbufferObject ...@@ -47,7 +47,7 @@ public struct MonsterExtra : IFlatbufferObject
public float Fvec(int j) { int o = __p.__offset(22); return o != 0 ? __p.bb.GetFloat(__p.__vector(o) + j * 4) : (float)0; } public float Fvec(int j) { int o = __p.__offset(22); return o != 0 ? __p.bb.GetFloat(__p.__vector(o) + j * 4) : (float)0; }
public int FvecLength { get { int o = __p.__offset(22); return o != 0 ? __p.__vector_len(o) : 0; } } public int FvecLength { get { int o = __p.__offset(22); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetFvecBytes() { return __p.__vector_as_span(22); } public Span<float> GetFvecBytes() { return __p.__vector_as_span<float>(22, 4); }
#else #else
public ArraySegment<byte>? GetFvecBytes() { return __p.__vector_as_arraysegment(22); } public ArraySegment<byte>? GetFvecBytes() { return __p.__vector_as_arraysegment(22); }
#endif #endif
......
...@@ -22,7 +22,7 @@ public struct Movie : IFlatbufferObject ...@@ -22,7 +22,7 @@ public struct Movie : IFlatbufferObject
public Character CharactersType(int j) { int o = __p.__offset(8); return o != 0 ? (Character)__p.bb.Get(__p.__vector(o) + j * 1) : (Character)0; } public Character CharactersType(int j) { int o = __p.__offset(8); return o != 0 ? (Character)__p.bb.Get(__p.__vector(o) + j * 1) : (Character)0; }
public int CharactersTypeLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } } public int CharactersTypeLength { get { int o = __p.__offset(8); return o != 0 ? __p.__vector_len(o) : 0; } }
#if ENABLE_SPAN_T #if ENABLE_SPAN_T
public Span<byte> GetCharactersTypeBytes() { return __p.__vector_as_span(8); } public Span<Character> GetCharactersTypeBytes() { return __p.__vector_as_span<Character>(8, 1); }
#else #else
public ArraySegment<byte>? GetCharactersTypeBytes() { return __p.__vector_as_arraysegment(8); } public ArraySegment<byte>? GetCharactersTypeBytes() { return __p.__vector_as_arraysegment(8); }
#endif #endif
......
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