Add vectorNumElements attribute to Builder for simpler vector creation. (#6328)

* Add vectorNumElements attribute to Builder for simpler vector creation.

This adds a default to EndVector which should simplify its use.

* Update tutorial to reflect new default arg in Python EndVector.

* Remove optional argument to Python EndVector.

* Add generated files.

* Unset Builder.vectorNumElems when not in use.
This commit is contained in:
Richard A Hofer
2020-12-14 15:00:28 -05:00
committed by GitHub
parent 8ab7c7e2c8
commit f8b203c9c4
7 changed files with 61 additions and 64 deletions

View File

@@ -103,7 +103,7 @@ class Builder(object):
## @cond FLATBUFFERS_INTENRAL
__slots__ = ("Bytes", "current_vtable", "head", "minalign", "objectEnd",
"vtables", "nested", "forceDefaults", "finished")
"vtables", "nested", "forceDefaults", "finished", "vectorNumElems")
"""Maximum buffer size constant, in bytes.
@@ -371,12 +371,13 @@ class Builder(object):
self.assertNotNested()
self.nested = True
self.vectorNumElems = numElems
self.Prep(N.Uint32Flags.bytewidth, elemSize*numElems)
self.Prep(alignment, elemSize*numElems) # In case alignment > int.
return self.Offset()
## @endcond
def EndVector(self, vectorNumElems):
def EndVector(self):
"""EndVector writes data necessary to finish vector construction."""
self.assertNested()
@@ -384,7 +385,8 @@ class Builder(object):
self.nested = False
## @endcond
# we already made space for this, so write without PrependUint32
self.PlaceUOffsetT(vectorNumElems)
self.PlaceUOffsetT(self.vectorNumElems)
self.vectorNumElems = None
return self.Offset()
def CreateString(self, s, encoding='utf-8', errors='strict'):
@@ -411,7 +413,8 @@ class Builder(object):
## @endcond
self.Bytes[self.Head():self.Head()+l] = x
return self.EndVector(len(x))
self.vectorNumElems = len(x)
return self.EndVector()
def CreateByteVector(self, x):
"""CreateString writes a byte vector."""
@@ -432,7 +435,8 @@ class Builder(object):
## @endcond
self.Bytes[self.Head():self.Head()+l] = x
return self.EndVector(len(x))
self.vectorNumElems = len(x)
return self.EndVector()
def CreateNumpyVector(self, x):
"""CreateNumpyVector writes a numpy array into the buffer."""
@@ -467,7 +471,8 @@ class Builder(object):
# tobytes ensures c_contiguous ordering
self.Bytes[self.Head():self.Head()+l] = x_lend.tobytes(order='C')
return self.EndVector(x.size)
self.vectorNumElems = x.size
return self.EndVector()
## @cond FLATBUFFERS_INTERNAL
def assertNested(self):