mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-03 20:31:23 +00:00
C++: Add default value handling to mutation/SetField code (#4230)
* Add default value handling to mutation/SetField code * Shorten reflection SetField impl * Modify impl to work with C++03 * Add more mutation tests * Fail SetField if non-scalar * Add IsScalar/IsInteger/IsFloat for reflection::BaseType * Use new IsScalar/IsInteger/IsFloat in reflection SetField * Assume scalar is either int or float
This commit is contained in:
committed by
Wouter van Oortmerssen
parent
b8f5f84437
commit
1a27c7017a
@@ -1162,14 +1162,17 @@ class CppGenerator : public BaseGenerator {
|
||||
|
||||
if (parser_.opts.mutable_buffer) {
|
||||
if (is_scalar) {
|
||||
const auto type = GenTypeWire(field.value.type, "", false);
|
||||
code_.SetValue("SET_FN", "SetField<" + type + ">");
|
||||
code_.SetValue("OFFSET_NAME", offset_str);
|
||||
code_.SetValue("FIELD_TYPE", GenTypeBasic(field.value.type, true));
|
||||
code_.SetValue("FIELD_VALUE",
|
||||
GenUnderlyingCast(field, false, "_" + field.name));
|
||||
code_.SetValue("DEFAULT_VALUE", GenDefaultConstant(field));
|
||||
|
||||
code_ += " bool mutate_{{FIELD_NAME}}({{FIELD_TYPE}} "
|
||||
"_{{FIELD_NAME}}) {";
|
||||
code_ += " return SetField({{OFFSET_NAME}}, {{FIELD_VALUE}});";
|
||||
code_ += " return {{SET_FN}}({{OFFSET_NAME}}, {{FIELD_VALUE}}, {{DEFAULT_VALUE}});";
|
||||
code_ += " }";
|
||||
} else {
|
||||
auto type = GenTypeGet(field.value.type, " ", "", " *", true);
|
||||
|
||||
Reference in New Issue
Block a user