mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-04 12:43:24 +00:00
Java/C#/Python prefixed size support (#4445)
* initial changes to support size prefixed buffers in Java * add slice equivalent to CSharp ByteBuffer * resolve TODO for slicing in CSharp code generation * add newly generated Java and CSharp test sources * fix typo in comment * add FinishSizePrefixed methods to CSharp FlatBufferBuilder as well * add option to allow writing the prefix as well * generate size-prefixed monster binary as well * extend JavaTest to test the size prefixed binary as well * use constants for size prefix length * fuse common code for getRootAs and getSizePrefixedRootAs * pulled file identifier out of if * add FinishSizePrefixed, GetSizePrefixedRootAs support for Python * Revert "extend JavaTest to test the size prefixed binary as well" This reverts commit68be4420dd. * Revert "generate size-prefixed monster binary as well" This reverts commit2939516fdf. * fix ByteBuffer.cs Slice() method; add proper CSharp and Java tests * fix unused parameter * increment version number * pulled out generated methods into separate utility class * pulled out generated methods into separate utility class for Python * fix indentation * remove unnecessary comment * fix newline and copyright * add ByteBufferUtil to csproj compilation * hide ByteBuffer's internal data; track offset into parent's array * test unsafe versions as well; compile and run in debug mode * clarify help text for size prefix * move ByteBuffer slicing behavior to subclass * fix protection levels * add size prefix support for text generation * add ByteBufferSlice to csproj compilation * revert size prefix handling for nested buffers * use duplicate instead of slice for removing size prefix * remove slice subclass and use duplicate for removing size prefix * remove slice specific tests * remove superfluous command line option
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
6b3f057bdc
commit
08cf50c54a
@@ -816,14 +816,55 @@ public class FlatBufferBuilder {
|
||||
* Finalize a buffer, pointing to the given `root_table`.
|
||||
*
|
||||
* @param root_table An offset to be added to the buffer.
|
||||
* @param size_prefix Whether to prefix the size to the buffer.
|
||||
*/
|
||||
public void finish(int root_table) {
|
||||
prep(minalign, SIZEOF_INT);
|
||||
protected void finish(int root_table, boolean size_prefix) {
|
||||
prep(minalign, SIZEOF_INT + (size_prefix ? SIZEOF_INT : 0));
|
||||
addOffset(root_table);
|
||||
if (size_prefix) {
|
||||
addInt(bb.capacity() - space);
|
||||
}
|
||||
bb.position(space);
|
||||
finished = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a buffer, pointing to the given `root_table`.
|
||||
*
|
||||
* @param root_table An offset to be added to the buffer.
|
||||
*/
|
||||
public void finish(int root_table) {
|
||||
finish(root_table, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a buffer, pointing to the given `root_table`, with the size prefixed.
|
||||
*
|
||||
* @param root_table An offset to be added to the buffer.
|
||||
*/
|
||||
public void finishSizePrefixed(int root_table) {
|
||||
finish(root_table, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a buffer, pointing to the given `root_table`.
|
||||
*
|
||||
* @param root_table An offset to be added to the buffer.
|
||||
* @param file_identifier A FlatBuffer file identifier to be added to the buffer before
|
||||
* `root_table`.
|
||||
* @param size_prefix Whether to prefix the size to the buffer.
|
||||
*/
|
||||
protected void finish(int root_table, String file_identifier, boolean size_prefix) {
|
||||
prep(minalign, SIZEOF_INT + FILE_IDENTIFIER_LENGTH + (size_prefix ? SIZEOF_INT : 0));
|
||||
if (file_identifier.length() != FILE_IDENTIFIER_LENGTH)
|
||||
throw new AssertionError("FlatBuffers: file identifier must be length " +
|
||||
FILE_IDENTIFIER_LENGTH);
|
||||
for (int i = FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {
|
||||
addByte((byte)file_identifier.charAt(i));
|
||||
}
|
||||
finish(root_table, size_prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a buffer, pointing to the given `root_table`.
|
||||
*
|
||||
@@ -832,14 +873,18 @@ public class FlatBufferBuilder {
|
||||
* `root_table`.
|
||||
*/
|
||||
public void finish(int root_table, String file_identifier) {
|
||||
prep(minalign, SIZEOF_INT + FILE_IDENTIFIER_LENGTH);
|
||||
if (file_identifier.length() != FILE_IDENTIFIER_LENGTH)
|
||||
throw new AssertionError("FlatBuffers: file identifier must be length " +
|
||||
FILE_IDENTIFIER_LENGTH);
|
||||
for (int i = FILE_IDENTIFIER_LENGTH - 1; i >= 0; i--) {
|
||||
addByte((byte)file_identifier.charAt(i));
|
||||
}
|
||||
finish(root_table);
|
||||
finish(root_table, file_identifier, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a buffer, pointing to the given `root_table`, with the size prefixed.
|
||||
*
|
||||
* @param root_table An offset to be added to the buffer.
|
||||
* @param file_identifier A FlatBuffer file identifier to be added to the buffer before
|
||||
* `root_table`.
|
||||
*/
|
||||
public void finishSizePrefixed(int root_table, String file_identifier) {
|
||||
finish(root_table, file_identifier, true);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user