• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1class {{struct.name}}DataView {
2 public:
3  {{struct.name}}DataView() {}
4
5  {{struct.name}}DataView(
6      internal::{{struct.name}}_Data* data,
7      mojo::internal::SerializationContext* context)
8{%- if struct|requires_context_for_data_view %}
9      : data_(data), context_(context) {}
10{%- else %}
11      : data_(data) {}
12{%- endif %}
13
14  bool is_null() const { return !data_; }
15
16{%- for pf in struct.packed.packed_fields_in_ordinal_order %}
17{%-   set kind = pf.field.kind %}
18{%-   set name = pf.field.name %}
19{%-   if kind|is_union_kind %}
20  inline void Get{{name|under_to_camel}}DataView(
21      {{kind|cpp_data_view_type}}* output);
22
23  template <typename UserType>
24  WARN_UNUSED_RESULT bool Read{{name|under_to_camel}}(UserType* output) {
25{%-     if pf.min_version != 0 %}
26    auto* pointer = data_->header_.version >= {{pf.min_version}} && !data_->{{name}}.is_null()
27                    ? &data_->{{name}} : nullptr;
28{%-     else %}
29    auto* pointer = !data_->{{name}}.is_null() ? &data_->{{name}} : nullptr;
30{%-     endif %}
31    return mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>(
32        pointer, output, context_);
33  }
34
35{%-   elif kind|is_object_kind %}
36  inline void Get{{name|under_to_camel}}DataView(
37      {{kind|cpp_data_view_type}}* output);
38
39  template <typename UserType>
40  WARN_UNUSED_RESULT bool Read{{name|under_to_camel}}(UserType* output) {
41{%-     if pf.min_version != 0 %}
42    auto* pointer = data_->header_.version >= {{pf.min_version}}
43                    ? data_->{{name}}.Get() : nullptr;
44{%-     else %}
45    auto* pointer = data_->{{name}}.Get();
46{%-     endif %}
47    return mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>(
48        pointer, output, context_);
49  }
50
51{%-   elif kind|is_enum_kind %}
52  template <typename UserType>
53  WARN_UNUSED_RESULT bool Read{{name|under_to_camel}}(UserType* output) const {
54{%-     if pf.min_version != 0 %}
55    auto data_value = data_->header_.version >= {{pf.min_version}}
56                      ? data_->{{name}} : 0;
57{%-     else %}
58    auto data_value = data_->{{name}};
59{%-     endif %}
60    return mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>(
61        data_value, output);
62  }
63
64  {{kind|cpp_data_view_type}} {{name}}() const {
65{%-     if pf.min_version != 0 %}
66    if (data_->header_.version < {{pf.min_version}})
67      return {{kind|get_qualified_name_for_kind}}{};
68{%-     endif %}
69    return static_cast<{{kind|cpp_data_view_type}}>(data_->{{name}});
70  }
71
72{%-   elif kind|is_any_handle_kind %}
73  {{kind|cpp_data_view_type}} Take{{name|under_to_camel}}() {
74    {{kind|cpp_data_view_type}} result;
75{%-     if pf.min_version != 0 %}
76    if (data_->header_.version < {{pf.min_version}})
77      return result;
78{%-     endif %}
79    bool ret =
80        mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>(
81            &data_->{{name}}, &result, context_);
82    DCHECK(ret);
83    return result;
84  }
85
86{%-   elif kind|is_any_interface_kind %}
87  template <typename UserType>
88  UserType Take{{name|under_to_camel}}() {
89    UserType result;
90{%-     if pf.min_version != 0 %}
91    if (data_->header_.version < {{pf.min_version}})
92      return result;
93{%-     endif %}
94    bool ret =
95        mojo::internal::Deserialize<{{kind|unmapped_type_for_serializer}}>(
96            &data_->{{name}}, &result, context_);
97    DCHECK(ret);
98    return result;
99  }
100
101{%-   else %}
102  {{kind|cpp_data_view_type}} {{name}}() const {
103{%-     if pf.min_version != 0 %}
104    if (data_->header_.version < {{pf.min_version}})
105      return {{kind|cpp_data_view_type}}{};
106{%-     endif %}
107    return data_->{{name}};
108  }
109
110{%-   endif %}
111{%- endfor %}
112 private:
113  internal::{{struct.name}}_Data* data_ = nullptr;
114{%- if struct|requires_context_for_data_view %}
115  mojo::internal::SerializationContext* context_ = nullptr;
116{%- endif %}
117};
118
119