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