Home | History | Annotate | Download | only in cpp_templates
      1 {%- import "struct_macros.tmpl" as struct_macros %}
      2 {%- set class_name = struct.name ~ "_Data" %}
      3 class {{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 };
     32 MOJO_COMPILE_ASSERT(sizeof({{class_name}}) == {{struct.packed|struct_size}},
     33                     bad_sizeof_{{class_name}});
     34