Commit 91fe9ba9 authored by Frank Benkstein's avatar Frank Benkstein Committed by Wouter van Oortmerssen

make unions with type aliases more usable (#5019)

Some generic C++ and Rust code is not generated when unions use type
aliases because of potential ambiguity. Actually check for this
ambiguity and only disable offending code only if it is found.
parent 4c3b6c24
...@@ -327,7 +327,7 @@ struct EnumVal { ...@@ -327,7 +327,7 @@ struct EnumVal {
}; };
struct EnumDef : public Definition { struct EnumDef : public Definition {
EnumDef() : is_union(false), uses_type_aliases(false) {} EnumDef() : is_union(false), uses_multiple_type_instances(false) {}
EnumVal *ReverseLookup(int64_t enum_idx, bool skip_union_default = true) { EnumVal *ReverseLookup(int64_t enum_idx, bool skip_union_default = true) {
for (auto it = vals.vec.begin() + for (auto it = vals.vec.begin() +
...@@ -342,7 +342,9 @@ struct EnumDef : public Definition { ...@@ -342,7 +342,9 @@ struct EnumDef : public Definition {
SymbolTable<EnumVal> vals; SymbolTable<EnumVal> vals;
bool is_union; bool is_union;
bool uses_type_aliases; // Type is a union which uses type aliases where at least one type is
// available under two different names.
bool uses_multiple_type_instances;
Type underlying_type; Type underlying_type;
}; };
......
...@@ -1025,7 +1025,7 @@ class CppGenerator : public BaseGenerator { ...@@ -1025,7 +1025,7 @@ class CppGenerator : public BaseGenerator {
} }
// Generate type traits for unions to map from a type to union enum value. // Generate type traits for unions to map from a type to union enum value.
if (enum_def.is_union && !enum_def.uses_type_aliases) { if (enum_def.is_union && !enum_def.uses_multiple_type_instances) {
for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end(); for (auto it = enum_def.vals.vec.begin(); it != enum_def.vals.vec.end();
++it) { ++it) {
const auto &ev = **it; const auto &ev = **it;
...@@ -1074,7 +1074,7 @@ class CppGenerator : public BaseGenerator { ...@@ -1074,7 +1074,7 @@ class CppGenerator : public BaseGenerator {
code_ += ""; code_ += "";
code_ += " void Reset();"; code_ += " void Reset();";
code_ += ""; code_ += "";
if (!enum_def.uses_type_aliases) { if (!enum_def.uses_multiple_type_instances) {
code_ += "#ifndef FLATBUFFERS_CPP98_STL"; code_ += "#ifndef FLATBUFFERS_CPP98_STL";
code_ += " template <typename T>"; code_ += " template <typename T>";
code_ += " void Set(T&& val) {"; code_ += " void Set(T&& val) {";
...@@ -1773,9 +1773,10 @@ class CppGenerator : public BaseGenerator { ...@@ -1773,9 +1773,10 @@ class CppGenerator : public BaseGenerator {
if (field.value.type.base_type == BASE_TYPE_UNION) { if (field.value.type.base_type == BASE_TYPE_UNION) {
auto u = field.value.type.enum_def; auto u = field.value.type.enum_def;
code_ += if (!field.value.type.enum_def->uses_multiple_type_instances)
" template<typename T> " code_ +=
"const T *{{NULLABLE_EXT}}{{FIELD_NAME}}_as() const;"; " template<typename T> "
"const T *{{NULLABLE_EXT}}{{FIELD_NAME}}_as() const;";
for (auto u_it = u->vals.vec.begin(); u_it != u->vals.vec.end(); for (auto u_it = u->vals.vec.begin(); u_it != u->vals.vec.end();
++u_it) { ++u_it) {
...@@ -1906,7 +1907,7 @@ class CppGenerator : public BaseGenerator { ...@@ -1906,7 +1907,7 @@ class CppGenerator : public BaseGenerator {
} }
auto u = field.value.type.enum_def; auto u = field.value.type.enum_def;
if (u->uses_type_aliases) continue; if (u->uses_multiple_type_instances) continue;
code_.SetValue("FIELD_NAME", Name(field)); code_.SetValue("FIELD_NAME", Name(field));
......
...@@ -1307,7 +1307,6 @@ class RustGenerator : public BaseGenerator { ...@@ -1307,7 +1307,6 @@ class RustGenerator : public BaseGenerator {
} }
auto u = field.value.type.enum_def; auto u = field.value.type.enum_def;
if (u->uses_type_aliases) continue;
code_.SetValue("FIELD_NAME", Name(field)); code_.SetValue("FIELD_NAME", Name(field));
......
...@@ -1603,6 +1603,7 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) { ...@@ -1603,6 +1603,7 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
ECHECK(ParseMetaData(&enum_def->attributes)); ECHECK(ParseMetaData(&enum_def->attributes));
EXPECT('{'); EXPECT('{');
if (is_union) enum_def->vals.Add("NONE", new EnumVal("NONE", 0)); if (is_union) enum_def->vals.Add("NONE", new EnumVal("NONE", 0));
std::set<std::pair<BaseType, StructDef*>> union_types;
for (;;) { for (;;) {
if (opts.proto_mode && attribute_ == "option") { if (opts.proto_mode && attribute_ == "option") {
ECHECK(ParseProtoOption()); ECHECK(ParseProtoOption());
...@@ -1633,10 +1634,17 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) { ...@@ -1633,10 +1634,17 @@ CheckedError Parser::ParseEnum(bool is_union, EnumDef **dest) {
if (ev.union_type.base_type != BASE_TYPE_STRUCT && if (ev.union_type.base_type != BASE_TYPE_STRUCT &&
ev.union_type.base_type != BASE_TYPE_STRING) ev.union_type.base_type != BASE_TYPE_STRING)
return Error("union value type may only be table/struct/string"); return Error("union value type may only be table/struct/string");
enum_def->uses_type_aliases = true;
} else { } else {
ev.union_type = Type(BASE_TYPE_STRUCT, LookupCreateStruct(full_name)); ev.union_type = Type(BASE_TYPE_STRUCT, LookupCreateStruct(full_name));
} }
if (!enum_def->uses_multiple_type_instances) {
auto union_type_key = std::make_pair(ev.union_type.base_type, ev.union_type.struct_def);
if (union_types.count(union_type_key) > 0) {
enum_def->uses_multiple_type_instances = true;
} else {
union_types.insert(union_type_key);
}
}
} }
if (Is('=')) { if (Is('=')) {
NEXT(); NEXT();
......
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
...@@ -65,6 +65,12 @@ ...@@ -65,6 +65,12 @@
<Compile Include="..\MyGame\Example\Any.cs"> <Compile Include="..\MyGame\Example\Any.cs">
<Link>MyGame\Example\Any.cs</Link> <Link>MyGame\Example\Any.cs</Link>
</Compile> </Compile>
<Compile Include="..\MyGame\Example\AnyAmbiguousAliases.cs">
<Link>MyGame\Example\AnyAmbiguousAliases.cs</Link>
</Compile>
<Compile Include="..\MyGame\Example\AnyUniqueAliases.cs">
<Link>MyGame\Example\AnyUniqueAliases.cs</Link>
</Compile>
<Compile Include="..\MyGame\Example\Color.cs"> <Compile Include="..\MyGame\Example\Color.cs">
<Link>MyGame\Example\Color.cs</Link> <Link>MyGame\Example\Color.cs</Link>
</Compile> </Compile>
...@@ -131,4 +137,4 @@ ...@@ -131,4 +137,4 @@
<Target Name="AfterBuild"> <Target Name="AfterBuild">
</Target> </Target>
--> -->
</Project> </Project>
\ No newline at end of file
// <auto-generated>
// automatically generated by the FlatBuffers compiler, do not modify
// </auto-generated>
namespace MyGame.Example
{
public enum AnyAmbiguousAliases : byte
{
NONE = 0,
M1 = 1,
M2 = 2,
M3 = 3,
};
}
// Code generated by the FlatBuffers compiler. DO NOT EDIT.
package Example
type AnyAmbiguousAliases = byte
const (
AnyAmbiguousAliasesNONE AnyAmbiguousAliases = 0
AnyAmbiguousAliasesM1 AnyAmbiguousAliases = 1
AnyAmbiguousAliasesM2 AnyAmbiguousAliases = 2
AnyAmbiguousAliasesM3 AnyAmbiguousAliases = 3
)
var EnumNamesAnyAmbiguousAliases = map[AnyAmbiguousAliases]string{
AnyAmbiguousAliasesNONE:"NONE",
AnyAmbiguousAliasesM1:"M1",
AnyAmbiguousAliasesM2:"M2",
AnyAmbiguousAliasesM3:"M3",
}
// automatically generated by the FlatBuffers compiler, do not modify
package MyGame.Example;
@javax.annotation.Generated(value="flatc")
public final class AnyAmbiguousAliases {
private AnyAmbiguousAliases() { }
public static final byte NONE = 0;
public static final byte M1 = 1;
public static final byte M2 = 2;
public static final byte M3 = 3;
public static final String[] names = { "NONE", "M1", "M2", "M3", };
public static String name(int e) { return names[e]; }
}
-- automatically generated by the FlatBuffers compiler, do not modify
-- namespace: Example
local AnyAmbiguousAliases = {
NONE = 0,
M1 = 1,
M2 = 2,
M3 = 3,
}
return AnyAmbiguousAliases -- return the module
\ No newline at end of file
<?php
// automatically generated by the FlatBuffers compiler, do not modify
namespace MyGame\Example;
class AnyAmbiguousAliases
{
const NONE = 0;
const M1 = 1;
const M2 = 2;
const M3 = 3;
private static $names = array(
"NONE",
"M1",
"M2",
"M3",
);
public static function Name($e)
{
if (!isset(self::$names[$e])) {
throw new \Exception();
}
return self::$names[$e];
}
}
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: Example
class AnyAmbiguousAliases(object):
NONE = 0
M1 = 1
M2 = 2
M3 = 3
// <auto-generated>
// automatically generated by the FlatBuffers compiler, do not modify
// </auto-generated>
namespace MyGame.Example
{
public enum AnyUniqueAliases : byte
{
NONE = 0,
M = 1,
T = 2,
M2 = 3,
};
}
// Code generated by the FlatBuffers compiler. DO NOT EDIT.
package Example
type AnyUniqueAliases = byte
const (
AnyUniqueAliasesNONE AnyUniqueAliases = 0
AnyUniqueAliasesM AnyUniqueAliases = 1
AnyUniqueAliasesT AnyUniqueAliases = 2
AnyUniqueAliasesM2 AnyUniqueAliases = 3
)
var EnumNamesAnyUniqueAliases = map[AnyUniqueAliases]string{
AnyUniqueAliasesNONE:"NONE",
AnyUniqueAliasesM:"M",
AnyUniqueAliasesT:"T",
AnyUniqueAliasesM2:"M2",
}
// automatically generated by the FlatBuffers compiler, do not modify
package MyGame.Example;
@javax.annotation.Generated(value="flatc")
public final class AnyUniqueAliases {
private AnyUniqueAliases() { }
public static final byte NONE = 0;
public static final byte M = 1;
public static final byte T = 2;
public static final byte M2 = 3;
public static final String[] names = { "NONE", "M", "T", "M2", };
public static String name(int e) { return names[e]; }
}
-- automatically generated by the FlatBuffers compiler, do not modify
-- namespace: Example
local AnyUniqueAliases = {
NONE = 0,
M = 1,
T = 2,
M2 = 3,
}
return AnyUniqueAliases -- return the module
\ No newline at end of file
<?php
// automatically generated by the FlatBuffers compiler, do not modify
namespace MyGame\Example;
class AnyUniqueAliases
{
const NONE = 0;
const M = 1;
const T = 2;
const M2 = 3;
private static $names = array(
"NONE",
"M",
"T",
"M2",
);
public static function Name($e)
{
if (!isset(self::$names[$e])) {
throw new \Exception();
}
return self::$names[$e];
}
}
# automatically generated by the FlatBuffers compiler, do not modify
# namespace: Example
class AnyUniqueAliases(object):
NONE = 0
M = 1
T = 2
M2 = 3
...@@ -172,8 +172,14 @@ public struct Monster : IFlatbufferObject ...@@ -172,8 +172,14 @@ public struct Monster : IFlatbufferObject
#endif #endif
public ulong[] GetVectorOfNonOwningReferencesArray() { return __p.__vector_as_array<ulong>(88); } public ulong[] GetVectorOfNonOwningReferencesArray() { return __p.__vector_as_array<ulong>(88); }
public bool MutateVectorOfNonOwningReferences(int j, ulong vector_of_non_owning_references) { int o = __p.__offset(88); if (o != 0) { __p.bb.PutUlong(__p.__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } } public bool MutateVectorOfNonOwningReferences(int j, ulong vector_of_non_owning_references) { int o = __p.__offset(88); if (o != 0) { __p.bb.PutUlong(__p.__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } }
public AnyUniqueAliases AnyUniqueType { get { int o = __p.__offset(90); return o != 0 ? (AnyUniqueAliases)__p.bb.Get(o + __p.bb_pos) : AnyUniqueAliases.NONE; } }
public bool MutateAnyUniqueType(AnyUniqueAliases any_unique_type) { int o = __p.__offset(90); if (o != 0) { __p.bb.Put(o + __p.bb_pos, (byte)any_unique_type); return true; } else { return false; } }
public TTable? AnyUnique<TTable>() where TTable : struct, IFlatbufferObject { int o = __p.__offset(92); return o != 0 ? (TTable?)__p.__union<TTable>(o) : null; }
public AnyAmbiguousAliases AnyAmbiguousType { get { int o = __p.__offset(94); return o != 0 ? (AnyAmbiguousAliases)__p.bb.Get(o + __p.bb_pos) : AnyAmbiguousAliases.NONE; } }
public bool MutateAnyAmbiguousType(AnyAmbiguousAliases any_ambiguous_type) { int o = __p.__offset(94); if (o != 0) { __p.bb.Put(o + __p.bb_pos, (byte)any_ambiguous_type); return true; } else { return false; } }
public TTable? AnyAmbiguous<TTable>() where TTable : struct, IFlatbufferObject { int o = __p.__offset(96); return o != 0 ? (TTable?)__p.__union<TTable>(o) : null; }
public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(43); } public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(47); }
public static void AddPos(FlatBufferBuilder builder, Offset<Vec3> posOffset) { builder.AddStruct(0, posOffset.Value, 0); } public static void AddPos(FlatBufferBuilder builder, Offset<Vec3> posOffset) { builder.AddStruct(0, posOffset.Value, 0); }
public static void AddMana(FlatBufferBuilder builder, short mana) { builder.AddShort(1, mana, 150); } public static void AddMana(FlatBufferBuilder builder, short mana) { builder.AddShort(1, mana, 150); }
public static void AddHp(FlatBufferBuilder builder, short hp) { builder.AddShort(2, hp, 100); } public static void AddHp(FlatBufferBuilder builder, short hp) { builder.AddShort(2, hp, 100); }
...@@ -261,6 +267,10 @@ public struct Monster : IFlatbufferObject ...@@ -261,6 +267,10 @@ public struct Monster : IFlatbufferObject
public static VectorOffset CreateVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddUlong(data[i]); return builder.EndVector(); } public static VectorOffset CreateVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); for (int i = data.Length - 1; i >= 0; i--) builder.AddUlong(data[i]); return builder.EndVector(); }
public static VectorOffset CreateVectorOfNonOwningReferencesVectorBlock(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); builder.Add(data); return builder.EndVector(); } public static VectorOffset CreateVectorOfNonOwningReferencesVectorBlock(FlatBufferBuilder builder, ulong[] data) { builder.StartVector(8, data.Length, 8); builder.Add(data); return builder.EndVector(); }
public static void StartVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); } public static void StartVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(8, numElems, 8); }
public static void AddAnyUniqueType(FlatBufferBuilder builder, AnyUniqueAliases anyUniqueType) { builder.AddByte(43, (byte)anyUniqueType, 0); }
public static void AddAnyUnique(FlatBufferBuilder builder, int anyUniqueOffset) { builder.AddOffset(44, anyUniqueOffset, 0); }
public static void AddAnyAmbiguousType(FlatBufferBuilder builder, AnyAmbiguousAliases anyAmbiguousType) { builder.AddByte(45, (byte)anyAmbiguousType, 0); }
public static void AddAnyAmbiguous(FlatBufferBuilder builder, int anyAmbiguousOffset) { builder.AddOffset(46, anyAmbiguousOffset, 0); }
public static Offset<Monster> EndMonster(FlatBufferBuilder builder) { public static Offset<Monster> EndMonster(FlatBufferBuilder builder) {
int o = builder.EndObject(); int o = builder.EndObject();
builder.Required(o, 10); // name builder.Required(o, 10); // name
......
...@@ -656,8 +656,50 @@ func (rcv *Monster) VectorOfNonOwningReferencesLength() int { ...@@ -656,8 +656,50 @@ func (rcv *Monster) VectorOfNonOwningReferencesLength() int {
return 0 return 0
} }
func (rcv *Monster) AnyUniqueType() byte {
o := flatbuffers.UOffsetT(rcv._tab.Offset(90))
if o != 0 {
return rcv._tab.GetByte(o + rcv._tab.Pos)
}
return 0
}
func (rcv *Monster) MutateAnyUniqueType(n byte) bool {
return rcv._tab.MutateByteSlot(90, n)
}
func (rcv *Monster) AnyUnique(obj *flatbuffers.Table) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(92))
if o != 0 {
rcv._tab.Union(obj, o)
return true
}
return false
}
func (rcv *Monster) AnyAmbiguousType() byte {
o := flatbuffers.UOffsetT(rcv._tab.Offset(94))
if o != 0 {
return rcv._tab.GetByte(o + rcv._tab.Pos)
}
return 0
}
func (rcv *Monster) MutateAnyAmbiguousType(n byte) bool {
return rcv._tab.MutateByteSlot(94, n)
}
func (rcv *Monster) AnyAmbiguous(obj *flatbuffers.Table) bool {
o := flatbuffers.UOffsetT(rcv._tab.Offset(96))
if o != 0 {
rcv._tab.Union(obj, o)
return true
}
return false
}
func MonsterStart(builder *flatbuffers.Builder) { func MonsterStart(builder *flatbuffers.Builder) {
builder.StartObject(43) builder.StartObject(47)
} }
func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) { func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) {
builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0) builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0)
...@@ -836,6 +878,18 @@ func MonsterAddVectorOfNonOwningReferences(builder *flatbuffers.Builder, vectorO ...@@ -836,6 +878,18 @@ func MonsterAddVectorOfNonOwningReferences(builder *flatbuffers.Builder, vectorO
func MonsterStartVectorOfNonOwningReferencesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { func MonsterStartVectorOfNonOwningReferencesVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT {
return builder.StartVector(8, numElems, 8) return builder.StartVector(8, numElems, 8)
} }
func MonsterAddAnyUniqueType(builder *flatbuffers.Builder, anyUniqueType byte) {
builder.PrependByteSlot(43, anyUniqueType, 0)
}
func MonsterAddAnyUnique(builder *flatbuffers.Builder, anyUnique flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(44, flatbuffers.UOffsetT(anyUnique), 0)
}
func MonsterAddAnyAmbiguousType(builder *flatbuffers.Builder, anyAmbiguousType byte) {
builder.PrependByteSlot(45, anyAmbiguousType, 0)
}
func MonsterAddAnyAmbiguous(builder *flatbuffers.Builder, anyAmbiguous flatbuffers.UOffsetT) {
builder.PrependUOffsetTSlot(46, flatbuffers.UOffsetT(anyAmbiguous), 0)
}
func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT {
return builder.EndObject() return builder.EndObject()
} }
...@@ -148,8 +148,14 @@ public final class Monster extends Table { ...@@ -148,8 +148,14 @@ public final class Monster extends Table {
public ByteBuffer vectorOfNonOwningReferencesAsByteBuffer() { return __vector_as_bytebuffer(88, 8); } public ByteBuffer vectorOfNonOwningReferencesAsByteBuffer() { return __vector_as_bytebuffer(88, 8); }
public ByteBuffer vectorOfNonOwningReferencesInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 88, 8); } public ByteBuffer vectorOfNonOwningReferencesInByteBuffer(ByteBuffer _bb) { return __vector_in_bytebuffer(_bb, 88, 8); }
public boolean mutateVectorOfNonOwningReferences(int j, long vector_of_non_owning_references) { int o = __offset(88); if (o != 0) { bb.putLong(__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } } public boolean mutateVectorOfNonOwningReferences(int j, long vector_of_non_owning_references) { int o = __offset(88); if (o != 0) { bb.putLong(__vector(o) + j * 8, vector_of_non_owning_references); return true; } else { return false; } }
public byte anyUniqueType() { int o = __offset(90); return o != 0 ? bb.get(o + bb_pos) : 0; }
public boolean mutateAnyUniqueType(byte any_unique_type) { int o = __offset(90); if (o != 0) { bb.put(o + bb_pos, any_unique_type); return true; } else { return false; } }
public Table anyUnique(Table obj) { int o = __offset(92); return o != 0 ? __union(obj, o) : null; }
public byte anyAmbiguousType() { int o = __offset(94); return o != 0 ? bb.get(o + bb_pos) : 0; }
public boolean mutateAnyAmbiguousType(byte any_ambiguous_type) { int o = __offset(94); if (o != 0) { bb.put(o + bb_pos, any_ambiguous_type); return true; } else { return false; } }
public Table anyAmbiguous(Table obj) { int o = __offset(96); return o != 0 ? __union(obj, o) : null; }
public static void startMonster(FlatBufferBuilder builder) { builder.startObject(43); } public static void startMonster(FlatBufferBuilder builder) { builder.startObject(47); }
public static void addPos(FlatBufferBuilder builder, int posOffset) { builder.addStruct(0, posOffset, 0); } public static void addPos(FlatBufferBuilder builder, int posOffset) { builder.addStruct(0, posOffset, 0); }
public static void addMana(FlatBufferBuilder builder, short mana) { builder.addShort(1, mana, 150); } public static void addMana(FlatBufferBuilder builder, short mana) { builder.addShort(1, mana, 150); }
public static void addHp(FlatBufferBuilder builder, short hp) { builder.addShort(2, hp, 100); } public static void addHp(FlatBufferBuilder builder, short hp) { builder.addShort(2, hp, 100); }
...@@ -223,6 +229,10 @@ public final class Monster extends Table { ...@@ -223,6 +229,10 @@ public final class Monster extends Table {
public static void addVectorOfNonOwningReferences(FlatBufferBuilder builder, int vectorOfNonOwningReferencesOffset) { builder.addOffset(42, vectorOfNonOwningReferencesOffset, 0); } public static void addVectorOfNonOwningReferences(FlatBufferBuilder builder, int vectorOfNonOwningReferencesOffset) { builder.addOffset(42, vectorOfNonOwningReferencesOffset, 0); }
public static int createVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, long[] data) { builder.startVector(8, data.length, 8); for (int i = data.length - 1; i >= 0; i--) builder.addLong(data[i]); return builder.endVector(); } public static int createVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, long[] data) { builder.startVector(8, data.length, 8); for (int i = data.length - 1; i >= 0; i--) builder.addLong(data[i]); return builder.endVector(); }
public static void startVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 8); } public static void startVectorOfNonOwningReferencesVector(FlatBufferBuilder builder, int numElems) { builder.startVector(8, numElems, 8); }
public static void addAnyUniqueType(FlatBufferBuilder builder, byte anyUniqueType) { builder.addByte(43, anyUniqueType, 0); }
public static void addAnyUnique(FlatBufferBuilder builder, int anyUniqueOffset) { builder.addOffset(44, anyUniqueOffset, 0); }
public static void addAnyAmbiguousType(FlatBufferBuilder builder, byte anyAmbiguousType) { builder.addByte(45, anyAmbiguousType, 0); }
public static void addAnyAmbiguous(FlatBufferBuilder builder, int anyAmbiguousOffset) { builder.addOffset(46, anyAmbiguousOffset, 0); }
public static int endMonster(FlatBufferBuilder builder) { public static int endMonster(FlatBufferBuilder builder) {
int o = builder.endObject(); int o = builder.endObject();
builder.required(o, 10); // name builder.required(o, 10); // name
......
...@@ -477,7 +477,37 @@ function Monster_mt:VectorOfNonOwningReferencesLength() ...@@ -477,7 +477,37 @@ function Monster_mt:VectorOfNonOwningReferencesLength()
end end
return 0 return 0
end end
function Monster.Start(builder) builder:StartObject(43) end function Monster_mt:AnyUniqueType()
local o = self.view:Offset(90)
if o ~= 0 then
return self.view:Get(flatbuffers.N.Uint8, o + self.view.pos)
end
return 0
end
function Monster_mt:AnyUnique()
local o = self.view:Offset(92)
if o ~= 0 then
local obj = flatbuffers.view.New(require('flatbuffers.binaryarray').New(0), 0)
self.view:Union(obj, o)
return obj
end
end
function Monster_mt:AnyAmbiguousType()
local o = self.view:Offset(94)
if o ~= 0 then
return self.view:Get(flatbuffers.N.Uint8, o + self.view.pos)
end
return 0
end
function Monster_mt:AnyAmbiguous()
local o = self.view:Offset(96)
if o ~= 0 then
local obj = flatbuffers.view.New(require('flatbuffers.binaryarray').New(0), 0)
self.view:Union(obj, o)
return obj
end
end
function Monster.Start(builder) builder:StartObject(47) end
function Monster.AddPos(builder, pos) builder:PrependStructSlot(0, pos, 0) end function Monster.AddPos(builder, pos) builder:PrependStructSlot(0, pos, 0) end
function Monster.AddMana(builder, mana) builder:PrependInt16Slot(1, mana, 150) end function Monster.AddMana(builder, mana) builder:PrependInt16Slot(1, mana, 150) end
function Monster.AddHp(builder, hp) builder:PrependInt16Slot(2, hp, 100) end function Monster.AddHp(builder, hp) builder:PrependInt16Slot(2, hp, 100) end
...@@ -537,6 +567,10 @@ function Monster.StartVectorOfCoOwningReferencesVector(builder, numElems) return ...@@ -537,6 +567,10 @@ function Monster.StartVectorOfCoOwningReferencesVector(builder, numElems) return
function Monster.AddNonOwningReference(builder, nonOwningReference) builder:PrependUint64Slot(41, nonOwningReference, 0) end function Monster.AddNonOwningReference(builder, nonOwningReference) builder:PrependUint64Slot(41, nonOwningReference, 0) end
function Monster.AddVectorOfNonOwningReferences(builder, vectorOfNonOwningReferences) builder:PrependUOffsetTRelativeSlot(42, vectorOfNonOwningReferences, 0) end function Monster.AddVectorOfNonOwningReferences(builder, vectorOfNonOwningReferences) builder:PrependUOffsetTRelativeSlot(42, vectorOfNonOwningReferences, 0) end
function Monster.StartVectorOfNonOwningReferencesVector(builder, numElems) return builder:StartVector(8, numElems, 8) end function Monster.StartVectorOfNonOwningReferencesVector(builder, numElems) return builder:StartVector(8, numElems, 8) end
function Monster.AddAnyUniqueType(builder, anyUniqueType) builder:PrependUint8Slot(43, anyUniqueType, 0) end
function Monster.AddAnyUnique(builder, anyUnique) builder:PrependUOffsetTRelativeSlot(44, anyUnique, 0) end
function Monster.AddAnyAmbiguousType(builder, anyAmbiguousType) builder:PrependUint8Slot(45, anyAmbiguousType, 0) end
function Monster.AddAnyAmbiguous(builder, anyAmbiguous) builder:PrependUOffsetTRelativeSlot(46, anyAmbiguous, 0) end
function Monster.End(builder) return builder:EndObject() end function Monster.End(builder) return builder:EndObject() end
return Monster -- return the module return Monster -- return the module
\ No newline at end of file
...@@ -611,22 +611,58 @@ class Monster extends Table ...@@ -611,22 +611,58 @@ class Monster extends Table
return $o != 0 ? $this->__vector_len($o) : 0; return $o != 0 ? $this->__vector_len($o) : 0;
} }
/**
* @return byte
*/
public function getAnyUniqueType()
{
$o = $this->__offset(90);
return $o != 0 ? $this->bb->getByte($o + $this->bb_pos) : \MyGame\Example\AnyUniqueAliases::NONE;
}
/**
* @returnint
*/
public function getAnyUnique($obj)
{
$o = $this->__offset(92);
return $o != 0 ? $this->__union($obj, $o) : null;
}
/**
* @return byte
*/
public function getAnyAmbiguousType()
{
$o = $this->__offset(94);
return $o != 0 ? $this->bb->getByte($o + $this->bb_pos) : \MyGame\Example\AnyAmbiguousAliases::NONE;
}
/**
* @returnint
*/
public function getAnyAmbiguous($obj)
{
$o = $this->__offset(96);
return $o != 0 ? $this->__union($obj, $o) : null;
}
/** /**
* @param FlatBufferBuilder $builder * @param FlatBufferBuilder $builder
* @return void * @return void
*/ */
public static function startMonster(FlatBufferBuilder $builder) public static function startMonster(FlatBufferBuilder $builder)
{ {
$builder->StartObject(43); $builder->StartObject(47);
} }
/** /**
* @param FlatBufferBuilder $builder * @param FlatBufferBuilder $builder
* @return Monster * @return Monster
*/ */
public static function createMonster(FlatBufferBuilder $builder, $pos, $mana, $hp, $name, $inventory, $color, $test_type, $test, $test4, $testarrayofstring, $testarrayoftables, $enemy, $testnestedflatbuffer, $testempty, $testbool, $testhashs32_fnv1, $testhashu32_fnv1, $testhashs64_fnv1, $testhashu64_fnv1, $testhashs32_fnv1a, $testhashu32_fnv1a, $testhashs64_fnv1a, $testhashu64_fnv1a, $testarrayofbools, $testf, $testf2, $testf3, $testarrayofstring2, $testarrayofsortedstruct, $flex, $test5, $vector_of_longs, $vector_of_doubles, $parent_namespace_test, $vector_of_referrables, $single_weak_reference, $vector_of_weak_references, $vector_of_strong_referrables, $co_owning_reference, $vector_of_co_owning_references, $non_owning_reference, $vector_of_non_owning_references) public static function createMonster(FlatBufferBuilder $builder, $pos, $mana, $hp, $name, $inventory, $color, $test_type, $test, $test4, $testarrayofstring, $testarrayoftables, $enemy, $testnestedflatbuffer, $testempty, $testbool, $testhashs32_fnv1, $testhashu32_fnv1, $testhashs64_fnv1, $testhashu64_fnv1, $testhashs32_fnv1a, $testhashu32_fnv1a, $testhashs64_fnv1a, $testhashu64_fnv1a, $testarrayofbools, $testf, $testf2, $testf3, $testarrayofstring2, $testarrayofsortedstruct, $flex, $test5, $vector_of_longs, $vector_of_doubles, $parent_namespace_test, $vector_of_referrables, $single_weak_reference, $vector_of_weak_references, $vector_of_strong_referrables, $co_owning_reference, $vector_of_co_owning_references, $non_owning_reference, $vector_of_non_owning_references, $any_unique_type, $any_unique, $any_ambiguous_type, $any_ambiguous)
{ {
$builder->startObject(43); $builder->startObject(47);
self::addPos($builder, $pos); self::addPos($builder, $pos);
self::addMana($builder, $mana); self::addMana($builder, $mana);
self::addHp($builder, $hp); self::addHp($builder, $hp);
...@@ -669,6 +705,10 @@ class Monster extends Table ...@@ -669,6 +705,10 @@ class Monster extends Table
self::addVectorOfCoOwningReferences($builder, $vector_of_co_owning_references); self::addVectorOfCoOwningReferences($builder, $vector_of_co_owning_references);
self::addNonOwningReference($builder, $non_owning_reference); self::addNonOwningReference($builder, $non_owning_reference);
self::addVectorOfNonOwningReferences($builder, $vector_of_non_owning_references); self::addVectorOfNonOwningReferences($builder, $vector_of_non_owning_references);
self::addAnyUniqueType($builder, $any_unique_type);
self::addAnyUnique($builder, $any_unique);
self::addAnyAmbiguousType($builder, $any_ambiguous_type);
self::addAnyAmbiguous($builder, $any_ambiguous);
$o = $builder->endObject(); $o = $builder->endObject();
$builder->required($o, 10); // name $builder->required($o, 10); // name
return $o; return $o;
...@@ -1497,6 +1537,36 @@ class Monster extends Table ...@@ -1497,6 +1537,36 @@ class Monster extends Table
$builder->startVector(8, $numElems, 8); $builder->startVector(8, $numElems, 8);
} }
/**
* @param FlatBufferBuilder $builder
* @param byte
* @return void
*/
public static function addAnyUniqueType(FlatBufferBuilder $builder, $anyUniqueType)
{
$builder->addByteX(43, $anyUniqueType, 0);
}
public static function addAnyUnique(FlatBufferBuilder $builder, $offset)
{
$builder->addOffsetX(44, $offset, 0);
}
/**
* @param FlatBufferBuilder $builder
* @param byte
* @return void
*/
public static function addAnyAmbiguousType(FlatBufferBuilder $builder, $anyAmbiguousType)
{
$builder->addByteX(45, $anyAmbiguousType, 0);
}
public static function addAnyAmbiguous(FlatBufferBuilder $builder, $offset)
{
$builder->addOffsetX(46, $offset, 0);
}
/** /**
* @param FlatBufferBuilder $builder * @param FlatBufferBuilder $builder
* @return int table offset * @return int table offset
......
...@@ -560,7 +560,41 @@ class Monster(object): ...@@ -560,7 +560,41 @@ class Monster(object):
return self._tab.VectorLen(o) return self._tab.VectorLen(o)
return 0 return 0
def MonsterStart(builder): builder.StartObject(43) # Monster
def AnyUniqueType(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(90))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Monster
def AnyUnique(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(92))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
# Monster
def AnyAmbiguousType(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(94))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Uint8Flags, o + self._tab.Pos)
return 0
# Monster
def AnyAmbiguous(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(96))
if o != 0:
from flatbuffers.table import Table
obj = Table(bytearray(), 0)
self._tab.Union(obj, o)
return obj
return None
def MonsterStart(builder): builder.StartObject(47)
def MonsterAddPos(builder, pos): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(pos), 0) def MonsterAddPos(builder, pos): builder.PrependStructSlot(0, flatbuffers.number_types.UOffsetTFlags.py_type(pos), 0)
def MonsterAddMana(builder, mana): builder.PrependInt16Slot(1, mana, 150) def MonsterAddMana(builder, mana): builder.PrependInt16Slot(1, mana, 150)
def MonsterAddHp(builder, hp): builder.PrependInt16Slot(2, hp, 100) def MonsterAddHp(builder, hp): builder.PrependInt16Slot(2, hp, 100)
...@@ -620,4 +654,8 @@ def MonsterStartVectorOfCoOwningReferencesVector(builder, numElems): return buil ...@@ -620,4 +654,8 @@ def MonsterStartVectorOfCoOwningReferencesVector(builder, numElems): return buil
def MonsterAddNonOwningReference(builder, nonOwningReference): builder.PrependUint64Slot(41, nonOwningReference, 0) def MonsterAddNonOwningReference(builder, nonOwningReference): builder.PrependUint64Slot(41, nonOwningReference, 0)
def MonsterAddVectorOfNonOwningReferences(builder, vectorOfNonOwningReferences): builder.PrependUOffsetTRelativeSlot(42, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfNonOwningReferences), 0) def MonsterAddVectorOfNonOwningReferences(builder, vectorOfNonOwningReferences): builder.PrependUOffsetTRelativeSlot(42, flatbuffers.number_types.UOffsetTFlags.py_type(vectorOfNonOwningReferences), 0)
def MonsterStartVectorOfNonOwningReferencesVector(builder, numElems): return builder.StartVector(8, numElems, 8) def MonsterStartVectorOfNonOwningReferencesVector(builder, numElems): return builder.StartVector(8, numElems, 8)
def MonsterAddAnyUniqueType(builder, anyUniqueType): builder.PrependUint8Slot(43, anyUniqueType, 0)
def MonsterAddAnyUnique(builder, anyUnique): builder.PrependUOffsetTRelativeSlot(44, flatbuffers.number_types.UOffsetTFlags.py_type(anyUnique), 0)
def MonsterAddAnyAmbiguousType(builder, anyAmbiguousType): builder.PrependUint8Slot(45, anyAmbiguousType, 0)
def MonsterAddAnyAmbiguous(builder, anyAmbiguous): builder.PrependUOffsetTRelativeSlot(46, flatbuffers.number_types.UOffsetTFlags.py_type(anyAmbiguous), 0)
def MonsterEnd(builder): return builder.EndObject() def MonsterEnd(builder): return builder.EndObject()
No preview for this file type
...@@ -18,6 +18,9 @@ enum Color:byte (bit_flags) { Red = 0, Green, Blue = 3, } ...@@ -18,6 +18,9 @@ enum Color:byte (bit_flags) { Red = 0, Green, Blue = 3, }
union Any { Monster, TestSimpleTableWithEnum, MyGame.Example2.Monster } union Any { Monster, TestSimpleTableWithEnum, MyGame.Example2.Monster }
union AnyUniqueAliases { M: Monster, T: TestSimpleTableWithEnum, M2: MyGame.Example2.Monster }
union AnyAmbiguousAliases { M1: Monster, M2: Monster, M3: Monster }
struct Test { a:short; b:byte; } struct Test { a:short; b:byte; }
table TestSimpleTableWithEnum (csharp_partial, private) { table TestSimpleTableWithEnum (csharp_partial, private) {
...@@ -94,6 +97,8 @@ table Monster { ...@@ -94,6 +97,8 @@ table Monster {
vector_of_co_owning_references:[ulong](id:40, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"default_ptr_type", cpp_ptr_type_get:".get()"); //was shared_ptr vector_of_co_owning_references:[ulong](id:40, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"default_ptr_type", cpp_ptr_type_get:".get()"); //was shared_ptr
non_owning_reference:ulong(id:41, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr non_owning_reference:ulong(id:41, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
vector_of_non_owning_references:[ulong](id:42, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr vector_of_non_owning_references:[ulong](id:42, hash:"fnv1a_64", cpp_type:"ReferrableT", cpp_ptr_type:"naked", cpp_ptr_type_get:""); //was weak_ptr
any_unique:AnyUniqueAliases(id:44);
any_ambiguous:AnyAmbiguousAliases (id:46);
} }
table TypeAliases { table TypeAliases {
......
...@@ -13,6 +13,14 @@ ...@@ -13,6 +13,14 @@
"type" : "string", "type" : "string",
"enum": ["NONE", "Monster", "TestSimpleTableWithEnum", "MyGame_Example2_Monster"] "enum": ["NONE", "Monster", "TestSimpleTableWithEnum", "MyGame_Example2_Monster"]
}, },
"MyGame_Example_AnyUniqueAliases" : {
"type" : "string",
"enum": ["NONE", "M", "T", "M2"]
},
"MyGame_Example_AnyAmbiguousAliases" : {
"type" : "string",
"enum": ["NONE", "M1", "M2", "M3"]
},
"MyGame_OtherNameSpace_Unused" : { "MyGame_OtherNameSpace_Unused" : {
"type" : "object", "type" : "object",
"properties" : { "properties" : {
...@@ -143,7 +151,11 @@ ...@@ -143,7 +151,11 @@
"co_owning_reference" : { "type" : "number" }, "co_owning_reference" : { "type" : "number" },
"vector_of_co_owning_references" : { "type" : "array", "items" : { "type" : "number" } }, "vector_of_co_owning_references" : { "type" : "array", "items" : { "type" : "number" } },
"non_owning_reference" : { "type" : "number" }, "non_owning_reference" : { "type" : "number" },
"vector_of_non_owning_references" : { "type" : "array", "items" : { "type" : "number" } } "vector_of_non_owning_references" : { "type" : "array", "items" : { "type" : "number" } },
"any_unique_type" : { "$ref" : "#/definitions/MyGame_Example_AnyUniqueAliases" },
"any_unique" : { "anyOf": [{ "$ref" : "#/definitions/MyGame_Example_Monster" },{ "$ref" : "#/definitions/MyGame_Example_TestSimpleTableWithEnum" },{ "$ref" : "#/definitions/MyGame_Example2_Monster" }] },
"any_ambiguous_type" : { "$ref" : "#/definitions/MyGame_Example_AnyAmbiguousAliases" },
"any_ambiguous" : { "anyOf": [{ "$ref" : "#/definitions/MyGame_Example_Monster" },{ "$ref" : "#/definitions/MyGame_Example_Monster" },{ "$ref" : "#/definitions/MyGame_Example_Monster" }] }
}, },
"required" : ["name"], "required" : ["name"],
"additionalProperties" : false "additionalProperties" : false
......
This diff is collapsed.
...@@ -43,6 +43,26 @@ MyGame.Example.Any = { ...@@ -43,6 +43,26 @@ MyGame.Example.Any = {
MyGame_Example2_Monster: 3, 3: 'MyGame_Example2_Monster' MyGame_Example2_Monster: 3, 3: 'MyGame_Example2_Monster'
}; };
/**
* @enum
*/
MyGame.Example.AnyUniqueAliases = {
NONE: 0, 0: 'NONE',
M: 1, 1: 'M',
T: 2, 2: 'T',
M2: 3, 3: 'M2'
};
/**
* @enum
*/
MyGame.Example.AnyAmbiguousAliases = {
NONE: 0, 0: 'NONE',
M1: 1, 1: 'M1',
M2: 2, 2: 'M2',
M3: 3, 3: 'M3'
};
/** /**
* @constructor * @constructor
*/ */
...@@ -1654,11 +1674,75 @@ MyGame.Example.Monster.prototype.vectorOfNonOwningReferencesLength = function() ...@@ -1654,11 +1674,75 @@ MyGame.Example.Monster.prototype.vectorOfNonOwningReferencesLength = function()
return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0; return offset ? this.bb.__vector_len(this.bb_pos + offset) : 0;
}; };
/**
* @returns {MyGame.Example.AnyUniqueAliases}
*/
MyGame.Example.Monster.prototype.anyUniqueType = function() {
var offset = this.bb.__offset(this.bb_pos, 90);
return offset ? /** @type {MyGame.Example.AnyUniqueAliases} */ (this.bb.readUint8(this.bb_pos + offset)) : MyGame.Example.AnyUniqueAliases.NONE;
};
/**
* @param {MyGame.Example.AnyUniqueAliases} value
* @returns {boolean}
*/
MyGame.Example.Monster.prototype.mutate_any_unique_type = function(value) {
var offset = this.bb.__offset(this.bb_pos, 90);
if (offset === 0) {
return false;
}
this.bb.writeUint8(this.bb_pos + offset, value);
return true;
};
/**
* @param {flatbuffers.Table} obj
* @returns {?flatbuffers.Table}
*/
MyGame.Example.Monster.prototype.anyUnique = function(obj) {
var offset = this.bb.__offset(this.bb_pos, 92);
return offset ? this.bb.__union(obj, this.bb_pos + offset) : null;
};
/**
* @returns {MyGame.Example.AnyAmbiguousAliases}
*/
MyGame.Example.Monster.prototype.anyAmbiguousType = function() {
var offset = this.bb.__offset(this.bb_pos, 94);
return offset ? /** @type {MyGame.Example.AnyAmbiguousAliases} */ (this.bb.readUint8(this.bb_pos + offset)) : MyGame.Example.AnyAmbiguousAliases.NONE;
};
/**
* @param {MyGame.Example.AnyAmbiguousAliases} value
* @returns {boolean}
*/
MyGame.Example.Monster.prototype.mutate_any_ambiguous_type = function(value) {
var offset = this.bb.__offset(this.bb_pos, 94);
if (offset === 0) {
return false;
}
this.bb.writeUint8(this.bb_pos + offset, value);
return true;
};
/**
* @param {flatbuffers.Table} obj
* @returns {?flatbuffers.Table}
*/
MyGame.Example.Monster.prototype.anyAmbiguous = function(obj) {
var offset = this.bb.__offset(this.bb_pos, 96);
return offset ? this.bb.__union(obj, this.bb_pos + offset) : null;
};
/** /**
* @param {flatbuffers.Builder} builder * @param {flatbuffers.Builder} builder
*/ */
MyGame.Example.Monster.startMonster = function(builder) { MyGame.Example.Monster.startMonster = function(builder) {
builder.startObject(43); builder.startObject(47);
}; };
/** /**
...@@ -2315,6 +2399,38 @@ MyGame.Example.Monster.startVectorOfNonOwningReferencesVector = function(builder ...@@ -2315,6 +2399,38 @@ MyGame.Example.Monster.startVectorOfNonOwningReferencesVector = function(builder
builder.startVector(8, numElems, 8); builder.startVector(8, numElems, 8);
}; };
/**
* @param {flatbuffers.Builder} builder
* @param {MyGame.Example.AnyUniqueAliases} anyUniqueType
*/
MyGame.Example.Monster.addAnyUniqueType = function(builder, anyUniqueType) {
builder.addFieldInt8(43, anyUniqueType, MyGame.Example.AnyUniqueAliases.NONE);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} anyUniqueOffset
*/
MyGame.Example.Monster.addAnyUnique = function(builder, anyUniqueOffset) {
builder.addFieldOffset(44, anyUniqueOffset, 0);
};
/**
* @param {flatbuffers.Builder} builder
* @param {MyGame.Example.AnyAmbiguousAliases} anyAmbiguousType
*/
MyGame.Example.Monster.addAnyAmbiguousType = function(builder, anyAmbiguousType) {
builder.addFieldInt8(45, anyAmbiguousType, MyGame.Example.AnyAmbiguousAliases.NONE);
};
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} anyAmbiguousOffset
*/
MyGame.Example.Monster.addAnyAmbiguous = function(builder, anyAmbiguousOffset) {
builder.addFieldOffset(46, anyAmbiguousOffset, 0);
};
/** /**
* @param {flatbuffers.Builder} builder * @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset} * @returns {flatbuffers.Offset}
......
...@@ -15,6 +15,18 @@ enum + ...@@ -15,6 +15,18 @@ enum +
Any_TestSimpleTableWithEnum = 2, Any_TestSimpleTableWithEnum = 2,
Any_MyGame_Example2_Monster = 3 Any_MyGame_Example2_Monster = 3
enum +
AnyUniqueAliases_NONE = 0,
AnyUniqueAliases_M = 1,
AnyUniqueAliases_T = 2,
AnyUniqueAliases_M2 = 3
enum +
AnyAmbiguousAliases_NONE = 0,
AnyAmbiguousAliases_M1 = 1,
AnyAmbiguousAliases_M2 = 2,
AnyAmbiguousAliases_M3 = 3
namespace MyGame namespace MyGame
struct InParentNamespace struct InParentNamespace
...@@ -297,11 +309,27 @@ struct Monster : flatbuffers_handle ...@@ -297,11 +309,27 @@ struct Monster : flatbuffers_handle
buf_.read_int64_le(buf_.flatbuffers_field_vector(pos_, 88) + i * 8) buf_.read_int64_le(buf_.flatbuffers_field_vector(pos_, 88) + i * 8)
def vector_of_non_owning_references_length(): def vector_of_non_owning_references_length():
buf_.flatbuffers_field_vector_len(pos_, 88) buf_.flatbuffers_field_vector_len(pos_, 88)
def any_unique_type():
buf_.flatbuffers_field_int8(pos_, 90, 0)
def any_unique_as_M():
MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_unique_as_T():
MyGame_Example_TestSimpleTableWithEnum { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_unique_as_M2():
MyGame_Example2_Monster { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_ambiguous_type():
buf_.flatbuffers_field_int8(pos_, 94, 0)
def any_ambiguous_as_M1():
MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def any_ambiguous_as_M2():
MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def any_ambiguous_as_M3():
MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def GetRootAsMonster(buf:string): Monster { buf, buf.flatbuffers_indirect(0) } def GetRootAsMonster(buf:string): Monster { buf, buf.flatbuffers_indirect(0) }
def MonsterStart(b_:flatbuffers_builder): def MonsterStart(b_:flatbuffers_builder):
b_.StartObject(43) b_.StartObject(47)
def MonsterAddPos(b_:flatbuffers_builder, pos:int): def MonsterAddPos(b_:flatbuffers_builder, pos:int):
b_.PrependStructSlot(0, pos, 0) b_.PrependStructSlot(0, pos, 0)
def MonsterAddMana(b_:flatbuffers_builder, mana:int): def MonsterAddMana(b_:flatbuffers_builder, mana:int):
...@@ -476,6 +504,14 @@ def MonsterCreateVectorOfNonOwningReferencesVector(b_:flatbuffers_builder, v_:[i ...@@ -476,6 +504,14 @@ def MonsterCreateVectorOfNonOwningReferencesVector(b_:flatbuffers_builder, v_:[i
b_.StartVector(8, v_.length, 8) b_.StartVector(8, v_.length, 8)
reverse(v_) e_: b_.PrependUint64(e_) reverse(v_) e_: b_.PrependUint64(e_)
b_.EndVector(v_.length) b_.EndVector(v_.length)
def MonsterAddAnyUniqueType(b_:flatbuffers_builder, any_unique_type:int):
b_.PrependUint8Slot(43, any_unique_type, 0)
def MonsterAddAnyUnique(b_:flatbuffers_builder, any_unique:int):
b_.PrependUOffsetTRelativeSlot(44, any_unique, 0)
def MonsterAddAnyAmbiguousType(b_:flatbuffers_builder, any_ambiguous_type:int):
b_.PrependUint8Slot(45, any_ambiguous_type, 0)
def MonsterAddAnyAmbiguous(b_:flatbuffers_builder, any_ambiguous:int):
b_.PrependUOffsetTRelativeSlot(46, any_ambiguous, 0)
def MonsterEnd(b_:flatbuffers_builder): def MonsterEnd(b_:flatbuffers_builder):
b_.EndObject() b_.EndObject()
......
This diff is collapsed.
...@@ -21,6 +21,28 @@ export enum Any{ ...@@ -21,6 +21,28 @@ export enum Any{
MyGame_Example2_Monster= 3 MyGame_Example2_Monster= 3
}}; }};
/**
* @enum
*/
export namespace MyGame.Example{
export enum AnyUniqueAliases{
NONE= 0,
M= 1,
T= 2,
M2= 3
}};
/**
* @enum
*/
export namespace MyGame.Example{
export enum AnyAmbiguousAliases{
NONE= 0,
M1= 1,
M2= 2,
M3= 3
}};
/** /**
* @constructor * @constructor
*/ */
...@@ -1593,11 +1615,75 @@ vectorOfNonOwningReferencesLength():number { ...@@ -1593,11 +1615,75 @@ vectorOfNonOwningReferencesLength():number {
return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0; return offset ? this.bb!.__vector_len(this.bb_pos + offset) : 0;
}; };
/**
* @returns MyGame.Example.AnyUniqueAliases
*/
anyUniqueType():MyGame.Example.AnyUniqueAliases {
var offset = this.bb!.__offset(this.bb_pos, 90);
return offset ? /** */ (this.bb!.readUint8(this.bb_pos + offset)) : MyGame.Example.AnyUniqueAliases.NONE;
};
/**
* @param MyGame.Example.AnyUniqueAliases value
* @returns boolean
*/
mutate_any_unique_type(value:MyGame.Example.AnyUniqueAliases):boolean {
var offset = this.bb!.__offset(this.bb_pos, 90);
if (offset === 0) {
return false;
}
this.bb!.writeUint8(this.bb_pos + offset, value);
return true;
};
/**
* @param flatbuffers.Table obj
* @returns ?flatbuffers.Table
*/
anyUnique<T extends flatbuffers.Table>(obj:T):T|null {
var offset = this.bb!.__offset(this.bb_pos, 92);
return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;
};
/**
* @returns MyGame.Example.AnyAmbiguousAliases
*/
anyAmbiguousType():MyGame.Example.AnyAmbiguousAliases {
var offset = this.bb!.__offset(this.bb_pos, 94);
return offset ? /** */ (this.bb!.readUint8(this.bb_pos + offset)) : MyGame.Example.AnyAmbiguousAliases.NONE;
};
/**
* @param MyGame.Example.AnyAmbiguousAliases value
* @returns boolean
*/
mutate_any_ambiguous_type(value:MyGame.Example.AnyAmbiguousAliases):boolean {
var offset = this.bb!.__offset(this.bb_pos, 94);
if (offset === 0) {
return false;
}
this.bb!.writeUint8(this.bb_pos + offset, value);
return true;
};
/**
* @param flatbuffers.Table obj
* @returns ?flatbuffers.Table
*/
anyAmbiguous<T extends flatbuffers.Table>(obj:T):T|null {
var offset = this.bb!.__offset(this.bb_pos, 96);
return offset ? this.bb!.__union(obj, this.bb_pos + offset) : null;
};
/** /**
* @param flatbuffers.Builder builder * @param flatbuffers.Builder builder
*/ */
static startMonster(builder:flatbuffers.Builder) { static startMonster(builder:flatbuffers.Builder) {
builder.startObject(43); builder.startObject(47);
}; };
/** /**
...@@ -2254,6 +2340,38 @@ static startVectorOfNonOwningReferencesVector(builder:flatbuffers.Builder, numEl ...@@ -2254,6 +2340,38 @@ static startVectorOfNonOwningReferencesVector(builder:flatbuffers.Builder, numEl
builder.startVector(8, numElems, 8); builder.startVector(8, numElems, 8);
}; };
/**
* @param flatbuffers.Builder builder
* @param MyGame.Example.AnyUniqueAliases anyUniqueType
*/
static addAnyUniqueType(builder:flatbuffers.Builder, anyUniqueType:MyGame.Example.AnyUniqueAliases) {
builder.addFieldInt8(43, anyUniqueType, MyGame.Example.AnyUniqueAliases.NONE);
};
/**
* @param flatbuffers.Builder builder
* @param flatbuffers.Offset anyUniqueOffset
*/
static addAnyUnique(builder:flatbuffers.Builder, anyUniqueOffset:flatbuffers.Offset) {
builder.addFieldOffset(44, anyUniqueOffset, 0);
};
/**
* @param flatbuffers.Builder builder
* @param MyGame.Example.AnyAmbiguousAliases anyAmbiguousType
*/
static addAnyAmbiguousType(builder:flatbuffers.Builder, anyAmbiguousType:MyGame.Example.AnyAmbiguousAliases) {
builder.addFieldInt8(45, anyAmbiguousType, MyGame.Example.AnyAmbiguousAliases.NONE);
};
/**
* @param flatbuffers.Builder builder
* @param flatbuffers.Offset anyAmbiguousOffset
*/
static addAnyAmbiguous(builder:flatbuffers.Builder, anyAmbiguousOffset:flatbuffers.Offset) {
builder.addFieldOffset(46, anyAmbiguousOffset, 0);
};
/** /**
* @param flatbuffers.Builder builder * @param flatbuffers.Builder builder
* @returns flatbuffers.Offset * @returns flatbuffers.Offset
......
...@@ -332,7 +332,6 @@ struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table { ...@@ -332,7 +332,6 @@ struct Movie FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
const void *main_character() const { const void *main_character() const {
return GetPointer<const void *>(VT_MAIN_CHARACTER); return GetPointer<const void *>(VT_MAIN_CHARACTER);
} }
template<typename T> const T *main_character_as() const;
const Attacker *main_character_as_MuLan() const { const Attacker *main_character_as_MuLan() const {
return main_character_type() == Character_MuLan ? static_cast<const Attacker *>(main_character()) : nullptr; return main_character_type() == Character_MuLan ? static_cast<const Attacker *>(main_character()) : nullptr;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment