OLD | NEW |
1 {%- import "struct_macros.tmpl" as struct_macros %} | |
2 {%- set class_name = struct.name ~ "_Data" -%} | 1 {%- set class_name = struct.name ~ "_Data" -%} |
3 | 2 |
4 class {{class_name}} { | 3 class {{class_name}} { |
5 public: | 4 public: |
6 static {{class_name}}* New(mojo::internal::Buffer* buf); | 5 static {{class_name}}* New(mojo::internal::Buffer* buf); |
7 | 6 |
8 static bool Validate(const void* data, | 7 static bool Validate(const void* data, |
9 mojo::internal::BoundsChecker* bounds_checker); | 8 mojo::internal::BoundsChecker* bounds_checker); |
10 | 9 |
11 mojo::internal::StructHeader header_; | |
12 {{struct_macros.fields(struct)}} | |
13 | |
14 void EncodePointersAndHandles(std::vector<mojo::Handle>* handles); | 10 void EncodePointersAndHandles(std::vector<mojo::Handle>* handles); |
15 void DecodePointersAndHandles(std::vector<mojo::Handle>* handles); | 11 void DecodePointersAndHandles(std::vector<mojo::Handle>* handles); |
16 | 12 |
| 13 mojo::internal::StructHeader header_; |
| 14 {%- for packed_field in struct.packed.packed_fields %} |
| 15 {%- set name = packed_field.field.name %} |
| 16 {%- set kind = packed_field.field.kind %} |
| 17 {%- if kind.spec == 'b' %} |
| 18 uint8_t {{name}} : 1; |
| 19 {%- elif kind|is_enum_kind %} |
| 20 int32_t {{name}}; |
| 21 {%- else %} |
| 22 {{kind|cpp_field_type}} {{name}}; |
| 23 {%- endif %} |
| 24 {%- if not loop.last %} |
| 25 {%- set next_pf = struct.packed.packed_fields[loop.index0 + 1] %} |
| 26 {%- set pad = next_pf.offset - (packed_field.offset + packed_field.size) %} |
| 27 {%- if pad > 0 %} |
| 28 uint8_t pad{{loop.index0}}_[{{pad}}]; |
| 29 {%- endif %} |
| 30 {%- endif %} |
| 31 {%- endfor %} |
| 32 |
| 33 {%- set num_fields = struct.versions[-1].num_fields %} |
| 34 {%- if num_fields > 0 %} |
| 35 {%- set last_field = struct.packed.packed_fields[num_fields - 1] %} |
| 36 {%- set offset = last_field.offset + last_field.size %} |
| 37 {%- set pad = offset|get_pad(8) %} |
| 38 {%- if pad > 0 %} |
| 39 uint8_t padfinal_[{{pad}}]; |
| 40 {%- endif %} |
| 41 {%- endif %} |
| 42 |
17 private: | 43 private: |
18 {{class_name}}(); | 44 {{class_name}}(); |
19 ~{{class_name}}() = delete; | 45 ~{{class_name}}() = delete; |
20 }; | 46 }; |
21 static_assert(sizeof({{class_name}}) == {{struct.versions[-1].num_bytes}}, | 47 static_assert(sizeof({{class_name}}) == {{struct.versions[-1].num_bytes}}, |
22 "Bad sizeof({{class_name}})"); | 48 "Bad sizeof({{class_name}})"); |
OLD | NEW |