Index: third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl |
diff --git a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl |
index ee8934e2f40d039757c94840effa20fd712e0ee1..255005ad3155ebe1213bd0d2bf3ea2540006fb44 100644 |
--- a/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl |
+++ b/third_party/mojo/src/mojo/public/tools/bindings/generators/cpp_templates/struct_declaration.tmpl |
@@ -1,4 +1,3 @@ |
-{%- import "struct_macros.tmpl" as struct_macros %} |
{%- set class_name = struct.name ~ "_Data" -%} |
class {{class_name}} { |
@@ -8,12 +7,39 @@ class {{class_name}} { |
static bool Validate(const void* data, |
mojo::internal::BoundsChecker* bounds_checker); |
- mojo::internal::StructHeader header_; |
-{{struct_macros.fields(struct)}} |
- |
void EncodePointersAndHandles(std::vector<mojo::Handle>* handles); |
void DecodePointersAndHandles(std::vector<mojo::Handle>* handles); |
+ mojo::internal::StructHeader header_; |
+{%- for packed_field in struct.packed.packed_fields %} |
+{%- set name = packed_field.field.name %} |
+{%- set kind = packed_field.field.kind %} |
+{%- if kind.spec == 'b' %} |
+ uint8_t {{name}} : 1; |
+{%- elif kind|is_enum_kind %} |
+ int32_t {{name}}; |
+{%- else %} |
+ {{kind|cpp_field_type}} {{name}}; |
+{%- endif %} |
+{%- if not loop.last %} |
+{%- set next_pf = struct.packed.packed_fields[loop.index0 + 1] %} |
+{%- set pad = next_pf.offset - (packed_field.offset + packed_field.size) %} |
+{%- if pad > 0 %} |
+ uint8_t pad{{loop.index0}}_[{{pad}}]; |
+{%- endif %} |
+{%- endif %} |
+{%- endfor %} |
+ |
+{%- set num_fields = struct.versions[-1].num_fields %} |
+{%- if num_fields > 0 %} |
+{%- set last_field = struct.packed.packed_fields[num_fields - 1] %} |
+{%- set offset = last_field.offset + last_field.size %} |
+{%- set pad = offset|get_pad(8) %} |
+{%- if pad > 0 %} |
+ uint8_t padfinal_[{{pad}}]; |
+{%- endif %} |
+{%- endif %} |
+ |
private: |
{{class_name}}(); |
~{{class_name}}() = delete; |