mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-19 13:13:06 +00:00
Lobster: added builder API for tables
This commit is contained in:
@@ -64,44 +64,60 @@ class Monster : flatbuffers_handle
|
||||
|
||||
def GetRootAsMonster(buf:string): return Monster { buf, buf.flatbuffers_indirect(0) }
|
||||
|
||||
def MonsterStart(b_:flatbuffers_builder):
|
||||
b_.StartObject(11)
|
||||
def MonsterAddPos(b_:flatbuffers_builder, pos:flatbuffers_offset):
|
||||
b_.PrependStructSlot(0, pos)
|
||||
def MonsterAddMana(b_:flatbuffers_builder, mana:int):
|
||||
b_.PrependInt16Slot(1, mana, 150)
|
||||
def MonsterAddHp(b_:flatbuffers_builder, hp:int):
|
||||
b_.PrependInt16Slot(2, hp, 100)
|
||||
def MonsterAddName(b_:flatbuffers_builder, name:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(3, name)
|
||||
def MonsterAddInventory(b_:flatbuffers_builder, inventory:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(5, inventory)
|
||||
struct MonsterBuilder:
|
||||
b_:flatbuffers_builder
|
||||
def start():
|
||||
b_.StartObject(11)
|
||||
return this
|
||||
def add_pos(pos:flatbuffers_offset):
|
||||
b_.PrependStructSlot(0, pos)
|
||||
return this
|
||||
def add_mana(mana:int):
|
||||
b_.PrependInt16Slot(1, mana, 150)
|
||||
return this
|
||||
def add_hp(hp:int):
|
||||
b_.PrependInt16Slot(2, hp, 100)
|
||||
return this
|
||||
def add_name(name:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(3, name)
|
||||
return this
|
||||
def add_inventory(inventory:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(5, inventory)
|
||||
return this
|
||||
def add_color(color:Color):
|
||||
b_.PrependInt8Slot(6, color, 2)
|
||||
return this
|
||||
def add_weapons(weapons:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(7, weapons)
|
||||
return this
|
||||
def add_equipped_type(equipped_type:Equipment):
|
||||
b_.PrependUint8Slot(8, equipped_type, 0)
|
||||
return this
|
||||
def add_equipped(equipped:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(9, equipped)
|
||||
return this
|
||||
def add_path(path:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(10, path)
|
||||
return this
|
||||
def end():
|
||||
return b_.EndObject()
|
||||
|
||||
def MonsterStartInventoryVector(b_:flatbuffers_builder, n_:int):
|
||||
b_.StartVector(1, n_, 1)
|
||||
def MonsterCreateInventoryVector(b_:flatbuffers_builder, v_:[int]):
|
||||
b_.StartVector(1, v_.length, 1)
|
||||
reverse(v_) e_: b_.PrependUint8(e_)
|
||||
return b_.EndVector(v_.length)
|
||||
def MonsterAddColor(b_:flatbuffers_builder, color:Color):
|
||||
b_.PrependInt8Slot(6, color, 2)
|
||||
def MonsterAddWeapons(b_:flatbuffers_builder, weapons:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(7, weapons)
|
||||
|
||||
def MonsterStartWeaponsVector(b_:flatbuffers_builder, n_:int):
|
||||
b_.StartVector(4, n_, 4)
|
||||
def MonsterCreateWeaponsVector(b_:flatbuffers_builder, v_:[flatbuffers_offset]):
|
||||
b_.StartVector(4, v_.length, 4)
|
||||
reverse(v_) e_: b_.PrependUOffsetTRelative(e_)
|
||||
return b_.EndVector(v_.length)
|
||||
def MonsterAddEquippedType(b_:flatbuffers_builder, equipped_type:Equipment):
|
||||
b_.PrependUint8Slot(8, equipped_type, 0)
|
||||
def MonsterAddEquipped(b_:flatbuffers_builder, equipped:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(9, equipped)
|
||||
def MonsterAddPath(b_:flatbuffers_builder, path:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(10, path)
|
||||
|
||||
def MonsterStartPathVector(b_:flatbuffers_builder, n_:int):
|
||||
b_.StartVector(12, n_, 4)
|
||||
def MonsterEnd(b_:flatbuffers_builder):
|
||||
return b_.EndObject()
|
||||
|
||||
class Weapon : flatbuffers_handle
|
||||
def name():
|
||||
@@ -111,12 +127,17 @@ class Weapon : flatbuffers_handle
|
||||
|
||||
def GetRootAsWeapon(buf:string): return Weapon { buf, buf.flatbuffers_indirect(0) }
|
||||
|
||||
def WeaponStart(b_:flatbuffers_builder):
|
||||
b_.StartObject(2)
|
||||
def WeaponAddName(b_:flatbuffers_builder, name:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(0, name)
|
||||
def WeaponAddDamage(b_:flatbuffers_builder, damage:int):
|
||||
b_.PrependInt16Slot(1, damage, 0)
|
||||
def WeaponEnd(b_:flatbuffers_builder):
|
||||
return b_.EndObject()
|
||||
struct WeaponBuilder:
|
||||
b_:flatbuffers_builder
|
||||
def start():
|
||||
b_.StartObject(2)
|
||||
return this
|
||||
def add_name(name:flatbuffers_offset):
|
||||
b_.PrependUOffsetTRelativeSlot(0, name)
|
||||
return this
|
||||
def add_damage(damage:int):
|
||||
b_.PrependInt16Slot(1, damage, 0)
|
||||
return this
|
||||
def end():
|
||||
return b_.EndObject()
|
||||
|
||||
|
||||
@@ -26,10 +26,11 @@ let weapon_damages = [ 3, 5 ]
|
||||
|
||||
let weapon_offsets = map(weapon_names) name, i:
|
||||
let ns = b.CreateString(name)
|
||||
b.MyGame_Sample_WeaponStart()
|
||||
b.MyGame_Sample_WeaponAddName(ns)
|
||||
b.MyGame_Sample_WeaponAddDamage(weapon_damages[i])
|
||||
b.MyGame_Sample_WeaponEnd()
|
||||
MyGame_Sample_WeaponBuilder { b }
|
||||
.start()
|
||||
.add_name(ns)
|
||||
.add_damage(weapon_damages[i])
|
||||
.end()
|
||||
|
||||
let weapons = b.MyGame_Sample_MonsterCreateWeaponsVector(weapon_offsets)
|
||||
|
||||
@@ -40,16 +41,17 @@ let name = b.CreateString("Orc")
|
||||
let inv = b.MyGame_Sample_MonsterCreateInventoryVector(map(10): _)
|
||||
|
||||
// Now pack it all together in our root monster object.
|
||||
b.MyGame_Sample_MonsterStart()
|
||||
b.MyGame_Sample_MonsterAddPos(b.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0))
|
||||
b.MyGame_Sample_MonsterAddHp(300)
|
||||
b.MyGame_Sample_MonsterAddName(name)
|
||||
b.MyGame_Sample_MonsterAddInventory(inv)
|
||||
b.MyGame_Sample_MonsterAddColor(MyGame_Sample_Color_Red)
|
||||
b.MyGame_Sample_MonsterAddWeapons(weapons)
|
||||
b.MyGame_Sample_MonsterAddEquippedType(MyGame_Sample_Equipment_Weapon)
|
||||
b.MyGame_Sample_MonsterAddEquipped(weapon_offsets[1])
|
||||
let orc = b.MyGame_Sample_MonsterEnd()
|
||||
let orc = MyGame_Sample_MonsterBuilder { b }
|
||||
.start()
|
||||
.add_pos(b.MyGame_Sample_CreateVec3(1.0, 2.0, 3.0))
|
||||
.add_hp(300)
|
||||
.add_name(name)
|
||||
.add_inventory(inv)
|
||||
.add_color(MyGame_Sample_Color_Red)
|
||||
.add_weapons(weapons)
|
||||
.add_equipped_type(MyGame_Sample_Equipment_Weapon)
|
||||
.add_equipped(weapon_offsets[1])
|
||||
.end()
|
||||
|
||||
// Finish the buffer!
|
||||
b.Finish(orc)
|
||||
|
||||
Reference in New Issue
Block a user