Add a function ResetKeep() which is like Reset() except that it only re-uses the unused space left in the buffer: it keeps previous data which was in the buffer. This is useful if you want to allocate 1 large buffer and use it for a bunch of flatbuffer objects.
With this change, both Reset() and ResetKeep() are now implemented in terms of a general ResetBuffer() function which allows using an arbitrary given buffer.
This also changes the behaviour of growBytesBuffer to never re-use the existing buffer: that would go against the meaning of ResetKeep(). It was an unlikely code path anyway: it could happen only if len(b.Bytes) < cap(b.Bytes) which is only possible if the user manually set b.Bytes.
Add a function
ResetKeep()
which is likeReset()
except that it only re-uses the unused space left in the buffer: it keeps previous data which was in the buffer. This is useful if you want to allocate 1 large buffer and use it for a bunch of flatbuffer objects.With this change, both
Reset()
andResetKeep()
are now implemented in terms of a generalResetBuffer()
function which allows using an arbitrary given buffer.This also changes the behaviour of
growBytesBuffer
to never re-use the existing buffer: that would go against the meaning ofResetKeep()
. It was an unlikely code path anyway: it could happen only iflen(b.Bytes) < cap(b.Bytes)
which is only possible if the user manually setb.Bytes
.The code in
growBytesBuffer
was also simplified and optimized: the benchmark added in https://github.com/google/flatbuffers/pull/8287 went fromto
on my personal laptop.