| OLD | NEW | 
|---|
| 1 {% from "enum_macros.tmpl" import enum_decl -%} | 1 {% from "enum_macros.tmpl" import enum_decl -%} | 
| 2 | 2 | 
| 3 class {{struct.name}} { | 3 class {{struct.name}} { | 
| 4  public: | 4  public: | 
| 5   using Data_ = internal::{{struct.name}}_Data; | 5   using Data_ = internal::{{struct.name}}_Data; | 
| 6 | 6 | 
| 7 {#--- Enums #} | 7 {#--- Enums #} | 
| 8 {%- for enum in struct.enums -%} | 8 {%- for enum in struct.enums -%} | 
| 9   {{enum_decl(enum)|indent(2)}} | 9   {{enum_decl(enum)|indent(2)}} | 
| 10 {%- endfor %} | 10 {%- endfor %} | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 26   } | 26   } | 
| 27 | 27 | 
| 28   template <typename U> | 28   template <typename U> | 
| 29   U To() const { | 29   U To() const { | 
| 30     return mojo::TypeConverter<U, {{struct.name}}>::Convert(*this); | 30     return mojo::TypeConverter<U, {{struct.name}}>::Convert(*this); | 
| 31   } | 31   } | 
| 32 | 32 | 
| 33   {{struct.name}}(); | 33   {{struct.name}}(); | 
| 34   ~{{struct.name}}(); | 34   ~{{struct.name}}(); | 
| 35 | 35 | 
| 36 {%  if struct|is_cloneable_kind %} | 36   // Clone() is a template so it is only instantiated if it is used. Thus, the | 
| 37   {{struct.name}}Ptr Clone() const; | 37   // bindings generator does not need to know whether typemapped native types | 
| 38 {%- endif %} | 38   // support operator=. | 
|  | 39   template <typename StructPtrType = {{struct.name}}Ptr> | 
|  | 40   {{struct.name}}Ptr Clone() const { | 
|  | 41     // Use StructPtrType to prevent the compiler from trying to compile this | 
|  | 42     // without being asked. | 
|  | 43     StructPtrType rv(New()); | 
|  | 44 {%-   for field in struct.fields %} | 
|  | 45 {%-     if field.kind|is_object_kind and not field.kind|is_string_kind and | 
|  | 46             not field.kind|is_typemapped_kind %} | 
|  | 47     rv->{{field.name}} = {{field.name}}.Clone(); | 
|  | 48 {%-     else %} | 
|  | 49     rv->{{field.name}} = {{field.name}}; | 
|  | 50 {%-     endif %} | 
|  | 51 {%-   endfor %} | 
|  | 52     return rv; | 
|  | 53   } | 
|  | 54 | 
| 39   // Equals() is a template so it is only instantiated if it is used. Thus, the | 55   // Equals() is a template so it is only instantiated if it is used. Thus, the | 
| 40   // bindings generator does not need to know whether typemapped native types | 56   // bindings generator does not need to know whether typemapped native types | 
| 41   // support operator==. | 57   // support operator==. | 
| 42   template <typename T, | 58   template <typename T, | 
| 43             typename std::enable_if<std::is_same< | 59             typename std::enable_if<std::is_same< | 
| 44                 T, {{struct.name}}>::value>::type* = nullptr> | 60                 T, {{struct.name}}>::value>::type* = nullptr> | 
| 45   bool Equals(const T& other) const { | 61   bool Equals(const T& other) const { | 
| 46   {%-  for field in struct.fields %} | 62   {%-  for field in struct.fields %} | 
| 47     if (!mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equals(th
    is->{{field.name}}, other.{{field.name}})) | 63     if (!mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equals(th
    is->{{field.name}}, other.{{field.name}})) | 
| 48       return false; | 64       return false; | 
| 49   {%-  endfor %} | 65   {%-  endfor %} | 
| 50     return true; | 66     return true; | 
| 51   } | 67   } | 
| 52 | 68 | 
| 53 {#--- Struct members #} | 69 {#--- Struct members #} | 
| 54 {%  for field in struct.fields %} | 70 {%  for field in struct.fields %} | 
| 55 {%-   set type = field.kind|cpp_wrapper_type %} | 71 {%-   set type = field.kind|cpp_wrapper_type %} | 
| 56 {%-   set name = field.name %} | 72 {%-   set name = field.name %} | 
| 57   {{type}} {{name}}; | 73   {{type}} {{name}}; | 
| 58 {%- endfor %} | 74 {%- endfor %} | 
| 59 }; | 75 }; | 
| 60 | 76 | 
| OLD | NEW | 
|---|