Index: mojo/public/tools/bindings/generators/dart_templates/struct_definition.tmpl |
diff --git a/mojo/public/tools/bindings/generators/dart_templates/struct_definition.tmpl b/mojo/public/tools/bindings/generators/dart_templates/struct_definition.tmpl |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a91f6102af762659b67edb9e8b1dd7689e12b47f |
--- /dev/null |
+++ b/mojo/public/tools/bindings/generators/dart_templates/struct_definition.tmpl |
@@ -0,0 +1,74 @@ |
+{#--- Begin #} |
+ |
+class {{struct.name}} implements bindings.MojoType<{{struct.name}}> { |
+{#--- Enums #} |
+{%- from "enum_definition.tmpl" import enum_def %} |
+{% for enum in struct.enums %} |
+ {{enum_def(" static ", enum)}} |
+{%- endfor %} |
+ |
+ |
+{#--- Constants #} |
+{% for constant in struct.constants %} |
+ static final {{constant.name}} = {{constant.value|expression_to_text}}; |
+{%- endfor %} |
+ |
+ |
+{#--- initDefaults() #} |
+{%- for packed_field in struct.packed.packed_fields %} |
+ {{packed_field.field.kind|dart_decl_type}} {{packed_field.field.name}} = {{packed_field.field|default_value}}; |
+{%- endfor %} |
+ |
+ {{struct.name}}(); |
+ |
+{#--- Encoding and decoding #} |
+ |
+ static const int encodedSize = |
+ bindings.kStructHeaderSize + {{struct.packed|payload_size}}; |
+ |
+ static {{struct.name}} decode(bindings.MojoDecoder decoder) { |
+ var packed; |
+ var val = new {{struct.name}}(); |
+ var numberOfBytes = decoder.readUint32(); |
+ var numberOfFields = decoder.readUint32(); |
+{%- for byte in struct.bytes %} |
+{%- if byte.packed_fields|length > 1 %} |
+ packed = decoder.readUint8(); |
+{%- for packed_field in byte.packed_fields %} |
+ val.{{packed_field.field.name}} = (((packed >> {{packed_field.bit}}) & 1) != 0) ? true : false; |
+{%- endfor %} |
+{%- else %} |
+{%- for packed_field in byte.packed_fields %} |
+ val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_snippet}}; |
+{%- endfor %} |
+{%- endif %} |
+{%- if byte.is_padding %} |
+ decoder.skip(1); |
+{%- endif %} |
+{%- endfor %} |
+ return val; |
+ } |
+ |
+ static void encode(bindings.MojoEncoder encoder, {{struct.name}} val) { |
+ var packed; |
+ encoder.writeUint32({{struct.name}}.encodedSize); |
+ encoder.writeUint32({{struct.packed.packed_fields|length}}); |
+ |
+{%- for byte in struct.bytes %} |
+{%- if byte.packed_fields|length > 1 %} |
+ packed = 0; |
+{%- for packed_field in byte.packed_fields %} |
+ packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}} |
+{%- endfor %} |
+ encoder.writeUint8(packed); |
+{%- else %} |
+{%- for packed_field in byte.packed_fields %} |
+ encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}}); |
+{%- endfor %} |
+{%- endif %} |
+{%- if byte.is_padding %} |
+ encoder.skip(1); |
+{%- endif %} |
+{%- endfor %} |
+ } |
+} |