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 16 matching lines...) Expand all Loading... |
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 // Clone() is a template so it is only instantiated if it is used. Thus, the | 36 // Clone() is a template so it is only instantiated if it is used. Thus, the |
37 // bindings generator does not need to know whether typemapped native types | 37 // bindings generator does not need to know whether Clone() or copy |
38 // support operator=. | 38 // constructor/assignment are available for members. |
39 template <typename StructPtrType = {{struct.name}}Ptr> | 39 template <typename StructPtrType = {{struct.name}}Ptr> |
40 {{struct.name}}Ptr Clone() const { | 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 | 41 |
55 // Equals() is a template so it is only instantiated if it is used. Thus, the | 42 // Equals() is a template so it is only instantiated if it is used. Thus, the |
56 // bindings generator does not need to know whether typemapped native types | 43 // bindings generator does not need to know whether Equals() or == operator |
57 // support operator==. | 44 // are available for members. |
58 template <typename T, | 45 template <typename T, |
59 typename std::enable_if<std::is_same< | 46 typename std::enable_if<std::is_same< |
60 T, {{struct.name}}>::value>::type* = nullptr> | 47 T, {{struct.name}}>::value>::type* = nullptr> |
61 bool Equals(const T& other) const { | 48 bool Equals(const T& other) const; |
62 {%- for field in struct.fields %} | |
63 if (!mojo::internal::ValueTraits<{{field.kind|cpp_wrapper_type}}>::Equals(th
is->{{field.name}}, other.{{field.name}})) | |
64 return false; | |
65 {%- endfor %} | |
66 return true; | |
67 } | |
68 | 49 |
69 {#--- Struct members #} | 50 {#--- Struct members #} |
70 {% for field in struct.fields %} | 51 {% for field in struct.fields %} |
71 {%- set type = field.kind|cpp_wrapper_type %} | 52 {%- set type = field.kind|cpp_wrapper_type %} |
72 {%- set name = field.name %} | 53 {%- set name = field.name %} |
73 {{type}} {{name}}; | 54 {{type}} {{name}}; |
74 {%- endfor %} | 55 {%- endfor %} |
75 }; | 56 }; |
76 | 57 |
OLD | NEW |