mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-09 14:46:26 +00:00
Add overloads for C# ByteBuffer/FlatBufferBuilder to allow adding vector blocks from ArraySegments or IntPtr (#7193)
* Add overloads to Add/Put for ArraySegment and IntPtr In order to allow using code to reduce memory allocations, add overloads to ByteBuffer's and FlatBuffersBuilder's Put/Add methods that take ArraySegment<T> or IntPtr respectively. Also, adaptions to the c# code generator in flatc to emit corresponding CreateVectorBlock() overloads * Add missing files generated with generate_code.py The previous commit changed the C# code generate, but didn't contain the updated generated test files. * Incorporate review findings (1) Adhere to 80 characters limit. (2) In FlatBufferBuilder.Add(IntPtr,int), move zero length check topmost and add sanity check against negative input
This commit is contained in:
@@ -1240,6 +1240,7 @@ class CSharpGenerator : public BaseGenerator {
|
||||
code += "); return ";
|
||||
code += "builder.EndVector(); }\n";
|
||||
|
||||
// add Create...VectorBlock() overloads for T[], ArraySegment<T> and IntPtr
|
||||
code += " public static VectorOffset ";
|
||||
code += "Create";
|
||||
code += Name(field);
|
||||
@@ -1250,6 +1251,25 @@ class CSharpGenerator : public BaseGenerator {
|
||||
code += ", data.Length, ";
|
||||
code += NumToString(alignment);
|
||||
code += "); builder.Add(data); return builder.EndVector(); }\n";
|
||||
|
||||
code += " public static VectorOffset ";
|
||||
code += "Create";
|
||||
code += Name(field);
|
||||
code += "VectorBlock(FlatBufferBuilder builder, ";
|
||||
code += "ArraySegment<" + GenTypeBasic(vector_type) + "> data) ";
|
||||
code += "{ builder.StartVector(";
|
||||
code += NumToString(elem_size);
|
||||
code += ", data.Count, ";
|
||||
code += NumToString(alignment);
|
||||
code += "); builder.Add(data); return builder.EndVector(); }\n";
|
||||
|
||||
code += " public static VectorOffset ";
|
||||
code += "Create";
|
||||
code += Name(field);
|
||||
code += "VectorBlock(FlatBufferBuilder builder, ";
|
||||
code += "IntPtr dataPtr, int sizeInBytes) ";
|
||||
code += "{ builder.StartVector(1, sizeInBytes, 1); ";
|
||||
code += "builder.Add<" + GenTypeBasic(vector_type) + ">(dataPtr, sizeInBytes); return builder.EndVector(); }\n";
|
||||
}
|
||||
// Generate a method to start a vector, data to be added manually
|
||||
// after.
|
||||
|
||||
Reference in New Issue
Block a user