Index: mojo/public/tools/bindings/generators/cpp_templates/struct_data_view_declaration.tmpl |
diff --git a/mojo/public/tools/bindings/generators/cpp_templates/struct_data_view_declaration.tmpl b/mojo/public/tools/bindings/generators/cpp_templates/struct_data_view_declaration.tmpl |
index 7c3493924c0ac94024f1ef2951cefa250cad8411..7ba07147ba79bb3b33b5f00355c8e5b41656a42b 100644 |
--- a/mojo/public/tools/bindings/generators/cpp_templates/struct_data_view_declaration.tmpl |
+++ b/mojo/public/tools/bindings/generators/cpp_templates/struct_data_view_declaration.tmpl |
@@ -1,29 +1,40 @@ |
class {{struct.name}}DataView { |
public: |
+ {{struct.name}}DataView() {} |
+ |
{{struct.name}}DataView( |
internal::{{struct.name}}_Data* data, |
mojo::internal::SerializationContext* context); |
+ bool is_null() const { return !data_; } |
+ |
{%- for pf in struct.packed.packed_fields_in_ordinal_order %} |
-{%- set kind = pf.field.kind -%} |
-{%- set name = pf.field.name -%} |
-{%- if kind|is_struct_kind or kind|is_array_kind or kind|is_string_kind |
- or kind|is_map_kind %} |
+{%- set kind = pf.field.kind %} |
+{%- set name = pf.field.name %} |
+{%- if kind|is_object_kind %} |
+ void Get{{name|under_to_camel}}DataView( |
+ {{kind|cpp_data_view_type}}* output); |
+ |
+{%- if kind|is_union_kind %} |
+ bool Read{{name|under_to_camel}}({{kind|cpp_wrapper_type}}* output); |
+ |
+{%- else %} |
template <typename UserType> |
- bool Read{{name|under_to_camel}}(UserType* value) { |
-{%- if pf.min_version != 0 %} |
+ bool Read{{name|under_to_camel}}(UserType* output) { |
+{%- if pf.min_version != 0 %} |
auto pointer = data_->header_.version >= {{pf.min_version}} |
? data_->{{name}}.Get() : nullptr; |
-{%- else %} |
+{%- else %} |
auto pointer = data_->{{name}}.Get(); |
-{%- endif %} |
+{%- endif %} |
return mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>( |
- pointer, value, context_); |
+ pointer, output, context_); |
} |
+{%- endif %} |
{%- elif kind|is_enum_kind %} |
template <typename UserType> |
- bool Read{{name|under_to_camel}}(UserType* value) const { |
+ bool Read{{name|under_to_camel}}(UserType* output) const { |
{%- if pf.min_version != 0 %} |
auto data_value = data_->header_.version >= {{pf.min_version}} |
? data_->{{name}} : 0; |
@@ -31,14 +42,11 @@ class {{struct.name}}DataView { |
auto data_value = data_->{{name}}; |
{%- endif %} |
return mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>( |
- data_value, value); |
+ data_value, output); |
} |
{{kind|get_qualified_name_for_kind}} {{name}}() const; |
-{%- elif kind|is_union_kind %} |
- bool Read{{name|under_to_camel}}({{kind|cpp_wrapper_type}}* value); |
- |
{%- elif kind|is_any_handle_or_interface_kind %} |
{{kind|cpp_wrapper_type}} Take{{name|under_to_camel}}(); |
@@ -47,7 +55,7 @@ class {{struct.name}}DataView { |
{%- endif %} |
{%- endfor %} |
private: |
- internal::{{struct.name}}_Data* data_; |
- mojo::internal::SerializationContext* context_; |
+ internal::{{struct.name}}_Data* data_ = nullptr; |
+ mojo::internal::SerializationContext* context_ = nullptr; |
}; |