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