code += " return builder_.Finish();\n}\n\n";
}
+static void GenPadding(const FieldDef &field, const std::function<void (int bits)> &f) {
+ if (field.padding) {
+ for (int i = 0; i < 4; i++)
+ if (static_cast<int>(field.padding) & (1 << i))
+ f((1 << i) * 8);
+ assert(!(field.padding & ~0xF));
+ }
+}
+
// Generate an accessor struct with constructor for a flatbuffers struct.
static void GenStruct(const Parser &parser, StructDef &struct_def,
std::string *code_ptr) {
auto &field = **it;
code += " " + GenTypeGet(parser, field.value.type, " ", "", " ");
code += field.name + "_;\n";
- if (field.padding) {
- for (int i = 0; i < 4; i++)
- if (static_cast<int>(field.padding) & (1 << i))
- code += " int" + NumToString((1 << i) * 8) +
- "_t __padding" + NumToString(padding_id++) + ";\n";
- assert(!(field.padding & ~0xF));
- }
+ GenPadding(field, [&code, &padding_id](int bits) {
+ code += " int" + NumToString(bits) +
+ "_t __padding" + NumToString(padding_id++) + ";\n";
+ });
}
// Generate a constructor that takes all fields as arguments.
code += "flatbuffers::EndianScalar(" + field.name + "))";
else
code += field.name + ")";
- if (field.padding)
+ GenPadding(field, [&code, &padding_id](int bits) {
+ (void)bits;
code += ", __padding" + NumToString(padding_id++) + "(0)";
+ });
}
code += " {";
padding_id = 0;
it != struct_def.fields.vec.end();
++it) {
auto &field = **it;
- if (field.padding)
+ GenPadding(field, [&code, &padding_id](int bits) {
+ (void)bits;
code += " (void)__padding" + NumToString(padding_id++) + ";";
+ });
}
code += " }\n\n";