• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1{%- import "struct_macros.tmpl" as struct_macros %}
2{%- set class_name = struct.name ~ "_Data" %}
3class {{class_name}} {
4 public:
5  static {{class_name}}* New(mojo::internal::Buffer* buf) {
6    return new (buf->Allocate(sizeof({{class_name}})))
7        {{class_name}}();
8  }
9
10  static bool Validate(const void* data,
11                       mojo::internal::BoundsChecker* bounds_checker) {
12    {{ struct_macros.validate(struct, class_name)|indent(4) }}
13  }
14
15  mojo::internal::StructHeader header_;
16{{struct_macros.fields(struct)}}
17
18  void EncodePointersAndHandles(std::vector<mojo::Handle>* handles) {
19    {{ struct_macros.encodes(struct)|indent(4) }}
20  }
21
22  void DecodePointersAndHandles(std::vector<mojo::Handle>* handles) {
23    {{ struct_macros.decodes(struct)|indent(4) }}
24  }
25
26 private:
27  {{class_name}}() {
28    header_.num_bytes = sizeof(*this);
29    header_.num_fields = {{struct.packed.packed_fields|length}};
30  }
31};
32MOJO_COMPILE_ASSERT(sizeof({{class_name}}) == {{struct.packed|struct_size}},
33                    bad_sizeof_{{class_name}});
34