Fixed missing "f" on float default values in C++/Java/C#

Bug: 28145201
Change-Id: I5a1818c40c2f4fbd00cfec3362040407976f7a39
Tested: on Linux.
parent 4a04bac2
......@@ -275,6 +275,12 @@ static void GenFullyQualifiedNameGetter(const Parser &parser, const std::string&
}
}
std::string GenDefaultConstant(const FieldDef &field) {
return field.value.type.base_type == BASE_TYPE_FLOAT
? field.value.constant + "f"
: field.value.constant;
}
// Generate an accessor struct, builder structs & function for a table.
static void GenTable(const Parser &parser, StructDef &struct_def,
std::string *code_ptr) {
......@@ -331,7 +337,7 @@ static void GenTable(const Parser &parser, StructDef &struct_def,
">(" + offsetstr;
// Default value as second arg for non-pointer types.
if (IsScalar(field.value.type.base_type))
call += ", " + field.value.constant;
call += ", " + GenDefaultConstant(field);
call += ")";
code += GenUnderlyingCast(field, true, call);
code += "; }\n";
......@@ -470,7 +476,7 @@ static void GenTable(const Parser &parser, StructDef &struct_def,
code += "(" + struct_def.name + "::" + GenFieldOffsetName(field) + ", ";
code += GenUnderlyingCast(field, false, field.name);
if (IsScalar(field.value.type.base_type))
code += ", " + field.value.constant;
code += ", " + GenDefaultConstant(field);
code += "); }\n";
}
}
......@@ -520,7 +526,7 @@ static void GenTable(const Parser &parser, StructDef &struct_def,
} else if (field.value.type.base_type == BASE_TYPE_BOOL) {
code += field.value.constant == "0" ? "false" : "true";
} else {
code += field.value.constant;
code += GenDefaultConstant(field);
}
}
}
......
......@@ -293,7 +293,7 @@ static Type DestinationType(const LanguageParameters &lang, const Parser &parser
}
}
static std::string GenOffsetType(const LanguageParameters &lang, const Parser &parser,
static std::string GenOffsetType(const LanguageParameters &lang, const Parser &parser,
const StructDef &struct_def) {
if(lang.language == IDLOptions::kCSharp) {
return "Offset<" + WrapInNameSpace(parser, struct_def) + ">";
......@@ -428,7 +428,7 @@ static std::string GenEnumDefaultValue(const Parser &parser, const Value &value)
return result;
}
static std::string GenDefaultValue(const LanguageParameters &lang, const Parser &parser,
static std::string GenDefaultValue(const LanguageParameters &lang, const Parser &parser,
const Value &value, bool enableLangOverrides) {
if (enableLangOverrides) {
// handles both enum case and vector of enum case
......@@ -438,9 +438,11 @@ static std::string GenDefaultValue(const LanguageParameters &lang, const Parser
return GenEnumDefaultValue(parser, value);
}
}
return value.type.base_type == BASE_TYPE_BOOL
? (value.constant == "0" ? "false" : "true")
: value.constant;
switch (value.type.base_type) {
case BASE_TYPE_FLOAT: return value.constant + "f";
case BASE_TYPE_BOOL: return value.constant == "0" ? "false" : "true";
default: return value.constant;
}
}
static std::string GenDefaultValue(const LanguageParameters &lang, const Parser &parser,
......@@ -448,7 +450,7 @@ static std::string GenDefaultValue(const LanguageParameters &lang, const Parser
return GenDefaultValue(lang, parser, value, true);
}
static std::string GenDefaultValueBasic(const LanguageParameters &lang, const Parser &parser,
static std::string GenDefaultValueBasic(const LanguageParameters &lang, const Parser &parser,
const Value &value, bool enableLangOverrides) {
if (!IsScalar(value.type.base_type)) {
if (enableLangOverrides) {
......@@ -470,7 +472,7 @@ static std::string GenDefaultValueBasic(const LanguageParameters &lang, const Pa
return GenDefaultValue(lang, parser, value, enableLangOverrides);
}
static std::string GenDefaultValueBasic(const LanguageParameters &lang, const Parser &parser,
static std::string GenDefaultValueBasic(const LanguageParameters &lang, const Parser &parser,
const Value &value) {
return GenDefaultValueBasic(lang, parser, value, true);
}
......@@ -573,7 +575,7 @@ static std::string GenSetter(const LanguageParameters &lang, const Parser &parse
const Type &type) {
if (IsScalar(type.base_type)) {
std::string setter = "bb." + FunctionStart(lang, 'P') + "ut";
if (GenTypeBasic(lang, parser, type, false) != "byte" &&
if (GenTypeBasic(lang, parser, type, false) != "byte" &&
type.base_type != BASE_TYPE_BOOL) {
setter += MakeCamel(GenTypeBasic(lang, parser, type, false));
}
......@@ -884,27 +886,27 @@ static void GenStruct(const LanguageParameters &lang, const Parser &parser,
break;
}
}
// generate object accessors if is nested_flatbuffer
auto nested = field.attributes.Lookup("nested_flatbuffer");
if (nested) {
auto nested_qualified_name =
parser.namespaces_.back()->GetFullyQualifiedName(nested->constant);
auto nested_type = parser.structs_.Lookup(nested_qualified_name);
auto nested_type_name = WrapInNameSpace(parser, *nested_type);
auto nestedMethodName = MakeCamel(field.name, lang.first_camel_upper)
+ "As" + nested_type_name;
auto getNestedMethodName = nestedMethodName;
if (lang.language == IDLOptions::kCSharp) {
getNestedMethodName = "Get" + nestedMethodName;
}
code += " public " + nested_type_name + " ";
code += nestedMethodName + "() { return ";
code += getNestedMethodName + "(new " + nested_type_name + "()); }\n";
code += " public " + nested_type_name + " " + getNestedMethodName;
code += "(" + nested_type_name + " obj) { ";
code += "int o = __offset(" + NumToString(field.value.offset) +"); ";
code += "return o != 0 ? obj.__init(__indirect(__vector(o)), bb) : null; }\n";
}
// generate object accessors if is nested_flatbuffer
auto nested = field.attributes.Lookup("nested_flatbuffer");
if (nested) {
auto nested_qualified_name =
parser.namespaces_.back()->GetFullyQualifiedName(nested->constant);
auto nested_type = parser.structs_.Lookup(nested_qualified_name);
auto nested_type_name = WrapInNameSpace(parser, *nested_type);
auto nestedMethodName = MakeCamel(field.name, lang.first_camel_upper)
+ "As" + nested_type_name;
auto getNestedMethodName = nestedMethodName;
if (lang.language == IDLOptions::kCSharp) {
getNestedMethodName = "Get" + nestedMethodName;
}
code += " public " + nested_type_name + " ";
code += nestedMethodName + "() { return ";
code += getNestedMethodName + "(new " + nested_type_name + "()); }\n";
code += " public " + nested_type_name + " " + getNestedMethodName;
code += "(" + nested_type_name + " obj) { ";
code += "int o = __offset(" + NumToString(field.value.offset) +"); ";
code += "return o != 0 ? obj.__init(__indirect(__vector(o)), bb) : null; }\n";
}
// generate mutators for scalar fields or vectors of scalars
if (parser.opts.mutable_buffer) {
auto underlying_type = field.value.type.base_type == BASE_TYPE_VECTOR
......
......@@ -72,8 +72,10 @@ public sealed class Monster : Table {
public int TestarrayofboolsLength { get { int o = __offset(52); return o != 0 ? __vector_len(o) : 0; } }
public ArraySegment<byte>? GetTestarrayofboolsBytes() { return __vector_as_arraysegment(52); }
public bool MutateTestarrayofbools(int j, bool testarrayofbools) { int o = __offset(52); if (o != 0) { bb.Put(__vector(o) + j * 1, (byte)(testarrayofbools ? 1 : 0)); return true; } else { return false; } }
public float Testf { get { int o = __offset(54); return o != 0 ? bb.GetFloat(o + bb_pos) : (float)3.14159f; } }
public bool MutateTestf(float testf) { int o = __offset(54); if (o != 0) { bb.PutFloat(o + bb_pos, testf); return true; } else { return false; } }
public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(25); }
public static void StartMonster(FlatBufferBuilder builder) { builder.StartObject(26); }
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 AddHp(FlatBufferBuilder builder, short hp) { builder.AddShort(2, hp, 100); }
......@@ -109,6 +111,7 @@ public sealed class Monster : Table {
public static void AddTestarrayofbools(FlatBufferBuilder builder, VectorOffset testarrayofboolsOffset) { builder.AddOffset(24, testarrayofboolsOffset.Value, 0); }
public static VectorOffset CreateTestarrayofboolsVector(FlatBufferBuilder builder, bool[] data) { builder.StartVector(1, data.Length, 1); for (int i = data.Length - 1; i >= 0; i--) builder.AddBool(data[i]); return builder.EndVector(); }
public static void StartTestarrayofboolsVector(FlatBufferBuilder builder, int numElems) { builder.StartVector(1, numElems, 1); }
public static void AddTestf(FlatBufferBuilder builder, float testf) { builder.AddFloat(25, testf, 3.14159f); }
public static Offset<Monster> EndMonster(FlatBufferBuilder builder) {
int o = builder.EndObject();
builder.Required(o, 10); // name
......
......@@ -313,7 +313,15 @@ func (rcv *Monster) TestarrayofboolsLength() int {
return 0
}
func MonsterStart(builder *flatbuffers.Builder) { builder.StartObject(25) }
func (rcv *Monster) Testf() float32 {
o := flatbuffers.UOffsetT(rcv._tab.Offset(54))
if o != 0 {
return rcv._tab.GetFloat32(o + rcv._tab.Pos)
}
return 3.14159
}
func MonsterStart(builder *flatbuffers.Builder) { builder.StartObject(26) }
func MonsterAddPos(builder *flatbuffers.Builder, pos flatbuffers.UOffsetT) { builder.PrependStructSlot(0, flatbuffers.UOffsetT(pos), 0) }
func MonsterAddMana(builder *flatbuffers.Builder, mana int16) { builder.PrependInt16Slot(1, mana, 150) }
func MonsterAddHp(builder *flatbuffers.Builder, hp int16) { builder.PrependInt16Slot(2, hp, 100) }
......@@ -350,4 +358,5 @@ func MonsterAddTesthashu64Fnv1a(builder *flatbuffers.Builder, testhashu64Fnv1a u
func MonsterAddTestarrayofbools(builder *flatbuffers.Builder, testarrayofbools flatbuffers.UOffsetT) { builder.PrependUOffsetTSlot(24, flatbuffers.UOffsetT(testarrayofbools), 0) }
func MonsterStartTestarrayofboolsVector(builder *flatbuffers.Builder, numElems int) flatbuffers.UOffsetT { return builder.StartVector(1, numElems, 1)
}
func MonsterAddTestf(builder *flatbuffers.Builder, testf float32) { builder.PrependFloat32Slot(25, testf, 3.14159) }
func MonsterEnd(builder *flatbuffers.Builder) flatbuffers.UOffsetT { return builder.EndObject() }
......@@ -78,8 +78,10 @@ public final class Monster extends Table {
public int testarrayofboolsLength() { int o = __offset(52); return o != 0 ? __vector_len(o) : 0; }
public ByteBuffer testarrayofboolsAsByteBuffer() { return __vector_as_bytebuffer(52, 1); }
public boolean mutateTestarrayofbools(int j, boolean testarrayofbools) { int o = __offset(52); if (o != 0) { bb.put(__vector(o) + j * 1, (byte)(testarrayofbools ? 1 : 0)); return true; } else { return false; } }
public float testf() { int o = __offset(54); return o != 0 ? bb.getFloat(o + bb_pos) : 3.14159f; }
public boolean mutateTestf(float testf) { int o = __offset(54); if (o != 0) { bb.putFloat(o + bb_pos, testf); return true; } else { return false; } }
public static void startMonster(FlatBufferBuilder builder) { builder.startObject(25); }
public static void startMonster(FlatBufferBuilder builder) { builder.startObject(26); }
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 addHp(FlatBufferBuilder builder, short hp) { builder.addShort(2, hp, 100); }
......@@ -115,6 +117,7 @@ public final class Monster extends Table {
public static void addTestarrayofbools(FlatBufferBuilder builder, int testarrayofboolsOffset) { builder.addOffset(24, testarrayofboolsOffset, 0); }
public static int createTestarrayofboolsVector(FlatBufferBuilder builder, boolean[] data) { builder.startVector(1, data.length, 1); for (int i = data.length - 1; i >= 0; i--) builder.addBoolean(data[i]); return builder.endVector(); }
public static void startTestarrayofboolsVector(FlatBufferBuilder builder, int numElems) { builder.startVector(1, numElems, 1); }
public static void addTestf(FlatBufferBuilder builder, float testf) { builder.addFloat(25, testf, 3.14159f); }
public static int endMonster(FlatBufferBuilder builder) {
int o = builder.endObject();
builder.required(o, 10); // name
......
......@@ -333,22 +333,31 @@ class Monster extends Table
return $o != 0 ? $this->__vector_len($o) : 0;
}
/**
* @return float
*/
public function getTestf()
{
$o = $this->__offset(54);
return $o != 0 ? $this->bb->getFloat($o + $this->bb_pos) : 3.14159;
}
/**
* @param FlatBufferBuilder $builder
* @return void
*/
public static function startMonster(FlatBufferBuilder $builder)
{
$builder->StartObject(25);
$builder->StartObject(26);
}
/**
* @param FlatBufferBuilder $builder
* @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)
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)
{
$builder->startObject(25);
$builder->startObject(26);
self::addPos($builder, $pos);
self::addMana($builder, $mana);
self::addHp($builder, $hp);
......@@ -373,6 +382,7 @@ class Monster extends Table
self::addTesthashs64Fnv1a($builder, $testhashs64_fnv1a);
self::addTesthashu64Fnv1a($builder, $testhashu64_fnv1a);
self::addTestarrayofbools($builder, $testarrayofbools);
self::addTestf($builder, $testf);
$o = $builder->endObject();
$builder->required($o, 10); // name
return $o;
......@@ -757,6 +767,16 @@ class Monster extends Table
$builder->startVector(1, $numElems, 1);
}
/**
* @param FlatBufferBuilder $builder
* @param float
* @return void
*/
public static function addTestf(FlatBufferBuilder $builder, $testf)
{
$builder->addFloatX(25, $testf, 3.14159);
}
/**
* @param FlatBufferBuilder $builder
* @return int table offset
......
......@@ -262,7 +262,14 @@ class Monster(object):
return self._tab.VectorLen(o)
return 0
def MonsterStart(builder): builder.StartObject(25)
# Monster
def Testf(self):
o = flatbuffers.number_types.UOffsetTFlags.py_type(self._tab.Offset(54))
if o != 0:
return self._tab.Get(flatbuffers.number_types.Float32Flags, o + self._tab.Pos)
return 3.14159
def MonsterStart(builder): builder.StartObject(26)
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 MonsterAddHp(builder, hp): builder.PrependInt16Slot(2, hp, 100)
......@@ -293,4 +300,5 @@ def MonsterAddTesthashs64Fnv1a(builder, testhashs64Fnv1a): builder.PrependInt64S
def MonsterAddTesthashu64Fnv1a(builder, testhashu64Fnv1a): builder.PrependUint64Slot(23, testhashu64Fnv1a, 0)
def MonsterAddTestarrayofbools(builder, testarrayofbools): builder.PrependUOffsetTRelativeSlot(24, flatbuffers.number_types.UOffsetTFlags.py_type(testarrayofbools), 0)
def MonsterStartTestarrayofboolsVector(builder, numElems): return builder.StartVector(1, numElems, 1)
def MonsterAddTestf(builder, testf): builder.PrependFloat32Slot(25, testf, 3.14159)
def MonsterEnd(builder): return builder.EndObject()
No preview for this file type
......@@ -59,6 +59,7 @@ table Monster {
testhashu32_fnv1a:uint (id:21, hash:"fnv1a_32");
testhashs64_fnv1a:long (id:22, hash:"fnv1a_64");
testhashu64_fnv1a:ulong (id:23, hash:"fnv1a_64");
testf:float = 3.14159 (id:25);
}
rpc_service MonsterStorage {
......
......@@ -203,7 +203,8 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VT_TESTHASHU32_FNV1A = 46,
VT_TESTHASHS64_FNV1A = 48,
VT_TESTHASHU64_FNV1A = 50,
VT_TESTARRAYOFBOOLS = 52
VT_TESTARRAYOFBOOLS = 52,
VT_TESTF = 54
};
const Vec3 *pos() const { return GetStruct<const Vec3 *>(VT_POS); }
Vec3 *mutable_pos() { return GetStruct<Vec3 *>(VT_POS); }
......@@ -258,6 +259,8 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
bool mutate_testhashu64_fnv1a(uint64_t _testhashu64_fnv1a) { return SetField(VT_TESTHASHU64_FNV1A, _testhashu64_fnv1a); }
const flatbuffers::Vector<uint8_t> *testarrayofbools() const { return GetPointer<const flatbuffers::Vector<uint8_t> *>(VT_TESTARRAYOFBOOLS); }
flatbuffers::Vector<uint8_t> *mutable_testarrayofbools() { return GetPointer<flatbuffers::Vector<uint8_t> *>(VT_TESTARRAYOFBOOLS); }
float testf() const { return GetField<float>(VT_TESTF, 3.14159f); }
bool mutate_testf(float _testf) { return SetField(VT_TESTF, _testf); }
bool Verify(flatbuffers::Verifier &verifier) const {
return VerifyTableStart(verifier) &&
VerifyField<Vec3>(verifier, VT_POS) &&
......@@ -296,6 +299,7 @@ struct Monster FLATBUFFERS_FINAL_CLASS : private flatbuffers::Table {
VerifyField<uint64_t>(verifier, VT_TESTHASHU64_FNV1A) &&
VerifyField<flatbuffers::uoffset_t>(verifier, VT_TESTARRAYOFBOOLS) &&
verifier.Verify(testarrayofbools()) &&
VerifyField<float>(verifier, VT_TESTF) &&
verifier.EndTable();
}
};
......@@ -327,10 +331,11 @@ struct MonsterBuilder {
void add_testhashs64_fnv1a(int64_t testhashs64_fnv1a) { fbb_.AddElement<int64_t>(Monster::VT_TESTHASHS64_FNV1A, testhashs64_fnv1a, 0); }
void add_testhashu64_fnv1a(uint64_t testhashu64_fnv1a) { fbb_.AddElement<uint64_t>(Monster::VT_TESTHASHU64_FNV1A, testhashu64_fnv1a, 0); }
void add_testarrayofbools(flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools) { fbb_.AddOffset(Monster::VT_TESTARRAYOFBOOLS, testarrayofbools); }
void add_testf(float testf) { fbb_.AddElement<float>(Monster::VT_TESTF, testf, 3.14159f); }
MonsterBuilder(flatbuffers::FlatBufferBuilder &_fbb) : fbb_(_fbb) { start_ = fbb_.StartTable(); }
MonsterBuilder &operator=(const MonsterBuilder &);
flatbuffers::Offset<Monster> Finish() {
auto o = flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 25));
auto o = flatbuffers::Offset<Monster>(fbb_.EndTable(start_, 26));
fbb_.Required(o, Monster::VT_NAME); // name
return o;
}
......@@ -360,12 +365,14 @@ inline flatbuffers::Offset<Monster> CreateMonster(flatbuffers::FlatBufferBuilder
uint32_t testhashu32_fnv1a = 0,
int64_t testhashs64_fnv1a = 0,
uint64_t testhashu64_fnv1a = 0,
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools = 0) {
flatbuffers::Offset<flatbuffers::Vector<uint8_t>> testarrayofbools = 0,
float testf = 3.14159f) {
MonsterBuilder builder_(_fbb);
builder_.add_testhashu64_fnv1a(testhashu64_fnv1a);
builder_.add_testhashs64_fnv1a(testhashs64_fnv1a);
builder_.add_testhashu64_fnv1(testhashu64_fnv1);
builder_.add_testhashs64_fnv1(testhashs64_fnv1);
builder_.add_testf(testf);
builder_.add_testarrayofbools(testarrayofbools);
builder_.add_testhashu32_fnv1a(testhashu32_fnv1a);
builder_.add_testhashs32_fnv1a(testhashs32_fnv1a);
......
......@@ -677,11 +677,19 @@ MyGame.Example.Monster.prototype.testarrayofboolsArray = function() {
return offset ? new Int8Array(this.bb.bytes().buffer, this.bb.__vector(this.bb_pos + offset), this.bb.__vector_len(this.bb_pos + offset)) : null;
};
/**
* @returns {number}
*/
MyGame.Example.Monster.prototype.testf = function() {
var offset = this.bb.__offset(this.bb_pos, 54);
return offset ? this.bb.readFloat32(this.bb_pos + offset) : 3.14159;
};
/**
* @param {flatbuffers.Builder} builder
*/
MyGame.Example.Monster.startMonster = function(builder) {
builder.startObject(25);
builder.startObject(26);
};
/**
......@@ -989,6 +997,14 @@ MyGame.Example.Monster.startTestarrayofboolsVector = function(builder, numElems)
builder.startVector(1, numElems, 1);
};
/**
* @param {flatbuffers.Builder} builder
* @param {number} testf
*/
MyGame.Example.Monster.addTestf = function(builder, testf) {
builder.addFieldFloat32(25, testf, 3.14159);
};
/**
* @param {flatbuffers.Builder} builder
* @returns {flatbuffers.Offset}
......
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