Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 9 additions & 16 deletions docs/source/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -1134,12 +1134,8 @@ The Builder provides multiple ways to create `vectors`.
=== "Python"

```py
# Create a FlatBuffer vector and prepend the weapons.
# Note: Since we prepend the data, prepend them in reverse order.
MyGame.Sample.Monster.StartWeaponsVector(builder, 2)
builder.PrependUOffsetTRelative(axe)
builder.PrependUOffsetTRelative(sword)
weapons = builder.EndVector()
# Use the generated helper to create the weapons vector from offsets.
weapons = MyGame.Sample.Monster.CreateWeaponsVector(builder, [sword, axe])
```

=== "Rust"
Expand Down Expand Up @@ -1352,16 +1348,13 @@ bit more directly.
```py
# Create a `vector` representing the inventory of the Orc. Each number
# could correspond to an item that can be claimed after he is slain.
# Note: Since we prepend the bytes, this loop iterates in reverse.
MyGame.Sample.Monster.StartInventoryVector(builder, 10)
for i in reversed(range(0, 10)):
builder.PrependByte(i)
inv = builder.EndVector()

MyGame.Sample.Monster.StartPathVector(builder, 2)
MyGame.Sample.Vec3.CreateVec3(builder, 1.0, 2.0, 3.0)
MyGame.Sample.Vec3.CreateVec3(builder, 4.0, 5.0, 6.0)
path = builder.EndVector()
inv = MyGame.Sample.Monster.CreateInventoryVector(builder, range(0, 10))

path_points = [
MyGame.Sample.Vec3T(x=1.0, y=2.0, z=3.0),
MyGame.Sample.Vec3T(x=4.0, y=5.0, z=6.0),
]
path = MyGame.Sample.Monster.CreatePathVector(builder, path_points)
```

=== "Rust"
Expand Down
6 changes: 6 additions & 0 deletions goldens/py/flatbuffers/goldens/Universe.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,12 @@ def UniverseStartGalaxiesVector(builder, numElems):
def StartGalaxiesVector(builder, numElems):
return UniverseStartGalaxiesVector(builder, numElems)

def UniverseCreateGalaxiesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateGalaxiesVector(builder, data):
UniverseCreateGalaxiesVector(builder, data)

def UniverseEnd(builder):
return builder.EndObject()

Expand Down
18 changes: 15 additions & 3 deletions python/flatbuffers/builder.py
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,6 @@ def PrependUOffsetTRelative(self, off):
off2 = self.Offset() - off + N.UOffsetTFlags.bytewidth
self.PlaceUOffsetT(off2)

## @cond FLATBUFFERS_INTERNAL
def StartVector(self, elemSize, numElems, alignment):
"""StartVector initializes bookkeeping for writing a new vector.

Expand All @@ -438,8 +437,6 @@ def StartVector(self, elemSize, numElems, alignment):
self.Prep(alignment, elemSize * numElems) # In case alignment > int.
return self.Offset()

## @endcond

def EndVector(self, numElems=None):
"""EndVector writes data necessary to finish vector construction."""

Expand Down Expand Up @@ -556,6 +553,21 @@ def CreateNumpyVector(self, x):
self.vectorNumElems = x.size
return self.EndVector()

def CreateVectorOfTables(self, offsets):
"""CreateVectorOfTables writes a vector of offsets such as tables or strings.

Args:
offsets: Iterable of offsets returned from previous builder operations.
Each element should be an integer compatible with UOffsetT.
"""

offsets = list(offsets)
self.StartVector(N.UOffsetTFlags.bytewidth, len(offsets),
N.UOffsetTFlags.bytewidth)
for off in reversed(offsets):
self.PrependUOffsetTRelative(off)
return self.EndVector()

## @cond FLATBUFFERS_INTERNAL
def assertNested(self):
"""Check that we are in the process of building an object."""
Expand Down
18 changes: 18 additions & 0 deletions python/flatbuffers/reflection/Enum.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ def EnumStartValuesVector(builder, numElems):
def StartValuesVector(builder, numElems):
return EnumStartValuesVector(builder, numElems)

def EnumCreateValuesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateValuesVector(builder, data):
EnumCreateValuesVector(builder, data)

def EnumAddIsUnion(builder, isUnion):
builder.PrependBoolSlot(2, isUnion, 0)

Expand All @@ -179,6 +185,12 @@ def EnumStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return EnumStartAttributesVector(builder, numElems)

def EnumCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
EnumCreateAttributesVector(builder, data)

def EnumAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)

Expand All @@ -191,6 +203,12 @@ def EnumStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return EnumStartDocumentationVector(builder, numElems)

def EnumCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
EnumCreateDocumentationVector(builder, data)

def EnumAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

Expand Down
12 changes: 12 additions & 0 deletions python/flatbuffers/reflection/EnumVal.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,12 @@ def EnumValStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return EnumValStartDocumentationVector(builder, numElems)

def EnumValCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
EnumValCreateDocumentationVector(builder, data)

def EnumValAddAttributes(builder, attributes):
builder.PrependUOffsetTRelativeSlot(5, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)

Expand All @@ -146,6 +152,12 @@ def EnumValStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return EnumValStartAttributesVector(builder, numElems)

def EnumValCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
EnumValCreateAttributesVector(builder, data)

def EnumValEnd(builder):
return builder.EndObject()

Expand Down
12 changes: 12 additions & 0 deletions python/flatbuffers/reflection/Field.py
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,12 @@ def FieldStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return FieldStartAttributesVector(builder, numElems)

def FieldCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
FieldCreateAttributesVector(builder, data)

def FieldAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(10, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)

Expand All @@ -247,6 +253,12 @@ def FieldStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return FieldStartDocumentationVector(builder, numElems)

def FieldCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
FieldCreateDocumentationVector(builder, data)

def FieldAddOptional(builder, optional):
builder.PrependBoolSlot(11, optional, 0)

Expand Down
18 changes: 18 additions & 0 deletions python/flatbuffers/reflection/Object.py
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,12 @@ def ObjectStartFieldsVector(builder, numElems):
def StartFieldsVector(builder, numElems):
return ObjectStartFieldsVector(builder, numElems)

def ObjectCreateFieldsVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateFieldsVector(builder, data):
ObjectCreateFieldsVector(builder, data)

def ObjectAddIsStruct(builder, isStruct):
builder.PrependBoolSlot(2, isStruct, 0)

Expand Down Expand Up @@ -188,6 +194,12 @@ def ObjectStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return ObjectStartAttributesVector(builder, numElems)

def ObjectCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
ObjectCreateAttributesVector(builder, data)

def ObjectAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(6, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)

Expand All @@ -200,6 +212,12 @@ def ObjectStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return ObjectStartDocumentationVector(builder, numElems)

def ObjectCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
ObjectCreateDocumentationVector(builder, data)

def ObjectAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(7, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

Expand Down
12 changes: 12 additions & 0 deletions python/flatbuffers/reflection/RPCCall.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,12 @@ def RPCCallStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return RPCCallStartAttributesVector(builder, numElems)

def RPCCallCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
RPCCallCreateAttributesVector(builder, data)

def RPCCallAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)

Expand All @@ -150,6 +156,12 @@ def RPCCallStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return RPCCallStartDocumentationVector(builder, numElems)

def RPCCallCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
RPCCallCreateDocumentationVector(builder, data)

def RPCCallEnd(builder):
return builder.EndObject()

Expand Down
24 changes: 24 additions & 0 deletions python/flatbuffers/reflection/Schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,12 @@ def SchemaStartObjectsVector(builder, numElems):
def StartObjectsVector(builder, numElems):
return SchemaStartObjectsVector(builder, numElems)

def SchemaCreateObjectsVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateObjectsVector(builder, data):
SchemaCreateObjectsVector(builder, data)

def SchemaAddEnums(builder, enums):
builder.PrependUOffsetTRelativeSlot(1, flatbuffers.number_types.UOffsetTFlags.py_type(enums), 0)

Expand All @@ -192,6 +198,12 @@ def SchemaStartEnumsVector(builder, numElems):
def StartEnumsVector(builder, numElems):
return SchemaStartEnumsVector(builder, numElems)

def SchemaCreateEnumsVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateEnumsVector(builder, data):
SchemaCreateEnumsVector(builder, data)

def SchemaAddFileIdent(builder, fileIdent):
builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(fileIdent), 0)

Expand Down Expand Up @@ -222,6 +234,12 @@ def SchemaStartServicesVector(builder, numElems):
def StartServicesVector(builder, numElems):
return SchemaStartServicesVector(builder, numElems)

def SchemaCreateServicesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateServicesVector(builder, data):
SchemaCreateServicesVector(builder, data)

def SchemaAddAdvancedFeatures(builder, advancedFeatures):
builder.PrependUint64Slot(6, advancedFeatures, 0)

Expand All @@ -240,6 +258,12 @@ def SchemaStartFbsFilesVector(builder, numElems):
def StartFbsFilesVector(builder, numElems):
return SchemaStartFbsFilesVector(builder, numElems)

def SchemaCreateFbsFilesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateFbsFilesVector(builder, data):
SchemaCreateFbsFilesVector(builder, data)

def SchemaEnd(builder):
return builder.EndObject()

Expand Down
6 changes: 6 additions & 0 deletions python/flatbuffers/reflection/SchemaFile.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ def SchemaFileStartIncludedFilenamesVector(builder, numElems):
def StartIncludedFilenamesVector(builder, numElems):
return SchemaFileStartIncludedFilenamesVector(builder, numElems)

def SchemaFileCreateIncludedFilenamesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateIncludedFilenamesVector(builder, data):
SchemaFileCreateIncludedFilenamesVector(builder, data)

def SchemaFileEnd(builder):
return builder.EndObject()

Expand Down
18 changes: 18 additions & 0 deletions python/flatbuffers/reflection/Service.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,12 @@ def ServiceStartCallsVector(builder, numElems):
def StartCallsVector(builder, numElems):
return ServiceStartCallsVector(builder, numElems)

def ServiceCreateCallsVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateCallsVector(builder, data):
ServiceCreateCallsVector(builder, data)

def ServiceAddAttributes(builder, attributes):
builder.PrependUOffsetTRelativeSlot(2, flatbuffers.number_types.UOffsetTFlags.py_type(attributes), 0)

Expand All @@ -149,6 +155,12 @@ def ServiceStartAttributesVector(builder, numElems):
def StartAttributesVector(builder, numElems):
return ServiceStartAttributesVector(builder, numElems)

def ServiceCreateAttributesVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateAttributesVector(builder, data):
ServiceCreateAttributesVector(builder, data)

def ServiceAddDocumentation(builder, documentation):
builder.PrependUOffsetTRelativeSlot(3, flatbuffers.number_types.UOffsetTFlags.py_type(documentation), 0)

Expand All @@ -161,6 +173,12 @@ def ServiceStartDocumentationVector(builder, numElems):
def StartDocumentationVector(builder, numElems):
return ServiceStartDocumentationVector(builder, numElems)

def ServiceCreateDocumentationVector(builder, data):
return builder.CreateVectorOfTables(data)

def CreateDocumentationVector(builder, data):
ServiceCreateDocumentationVector(builder, data)

def ServiceAddDeclarationFile(builder, declarationFile):
builder.PrependUOffsetTRelativeSlot(4, flatbuffers.number_types.UOffsetTFlags.py_type(declarationFile), 0)

Expand Down
20 changes: 10 additions & 10 deletions scripts/check_generate_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,11 @@
if result.returncode != 0:
print(
"\n"
"ERROR: *********************************************************\n"
"ERROR: * The following differences were found after building. *\n"
"ERROR: * Perhaps there is a difference in the flags for the. *\n"
"ERROR: * CMakeLists.txt vs the script/generate_code.py script? *\n"
"ERROR: *********************************************************\n"
"ERROR: **********************************************************\n"
"ERROR: * The following differences were found after building. *\n"
"ERROR: * Perhaps there is a difference in the flags for the. *\n"
"ERROR: * CMakeLists.txt vs the scripts/generate_code.py script? *\n"
"ERROR: **********************************************************\n"
)
subprocess.run(["git", "diff", "--binary", "--exit-code"], cwd=root_path)
sys.exit(result.returncode)
Expand All @@ -55,11 +55,11 @@
if result.returncode != 0:
print(
"\n"
"ERROR: ********************************************************\n"
"ERROR: * The following differences were found after running *\n"
"ERROR: * the script/generate_code.py script. Maybe you forgot *\n"
"ERROR: * to run it after making changes in a generator? *\n"
"ERROR: ********************************************************\n"
"ERROR: *********************************************************\n"
"ERROR: * The following differences were found after running *\n"
"ERROR: * the scripts/generate_code.py script. Maybe you forgot *\n"
"ERROR: * to run it after making changes in a generator? *\n"
"ERROR: *********************************************************\n"
)
subprocess.run(["git", "diff", "--binary", "--exit-code"], cwd=root_path)
sys.exit(result.returncode)
Expand Down
Loading
Loading