| OLD | NEW |
| (Empty) |
| 1 {%- set class_name = struct.name -%} | |
| 2 {%- set dtor_name = [] %} | |
| 3 {%- if struct|is_struct_with_handles %} | |
| 4 {%- set _ = dtor_name.append("&internal::%s_Data_Destructor"|format(struct.nam
e)) %} | |
| 5 {%- else %} | |
| 6 {%- set _ = dtor_name.append("NULL") %} | |
| 7 {%- endif %} | |
| 8 | |
| 9 {%- macro set_default(kind, value, depth) -%} | |
| 10 {#--- Strings ---#} | |
| 11 {%- if kind|is_string_kind -%} | |
| 12 {{caller("mojo::String(" ~ value|expression_to_text(module) ~ ")")}} | |
| 13 {#--- Arrays ---#} | |
| 14 {%- elif kind|is_array_kind %} | |
| 15 {%- set _ = value|verify_token_type("ARRAY") %} | |
| 16 { | |
| 17 {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}({{value[1]|length}}); | |
| 18 {%- for element in value[1] %} | |
| 19 {%- filter indent(2) %} | |
| 20 {%- call(result) set_default(kind.kind, element, depth+1) %} | |
| 21 tmp{{depth}}[{{loop.index0}}] = {{result}}; | |
| 22 {%- endcall %} | |
| 23 {%- endfilter %} | |
| 24 {%- endfor -%} | |
| 25 {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}} | |
| 26 } | |
| 27 {#--- Objects ---#} | |
| 28 {%- elif kind|is_object_kind %} | |
| 29 {%- set _ = value|verify_token_type("OBJECT") %} | |
| 30 { | |
| 31 {{kind|cpp_wrapper_type}}::Builder tmp{{depth}}; | |
| 32 {%- set struct = kinds[kind.spec] %} | |
| 33 {%- for element in value[1] %} | |
| 34 {#- Use struct.packed_fields to order struct values by ordinal number #} | |
| 35 {%- set subfield = struct.fields[loop.index0] %} | |
| 36 {%- filter indent(2) %} | |
| 37 {%- call(result) set_default(subfield.kind, element, depth+1) %} | |
| 38 tmp{{depth}}.set_{{subfield.name}}({{result}}); | |
| 39 {%- endcall %} | |
| 40 {%- endfilter %} | |
| 41 {%- endfor -%} | |
| 42 {{caller("tmp" ~ depth ~ ".Finish()")|indent(2)}} | |
| 43 } | |
| 44 {#--- POD types ---#} | |
| 45 {%- else -%} | |
| 46 {{caller(value|expression_to_text(module))}} | |
| 47 {%- endif %} | |
| 48 {%- endmacro %} | |
| 49 | |
| 50 {{class_name}}::Builder::Builder(mojo::Buffer* buf) | |
| 51 : data_(Data::New(buf, {{dtor_name[0]}})) { | |
| 52 {%- for pf in struct.packed.packed_fields if pf.field.default %} | |
| 53 {%- filter indent(2) %} | |
| 54 {%- call(result) set_default(pf.field.kind, pf.field.default, 0) %} | |
| 55 set_{{pf.field.name}}({{result}}); | |
| 56 {%- endcall %} | |
| 57 {%- endfilter %} | |
| 58 {%- endfor %} | |
| 59 } | |
| 60 | |
| 61 {{class_name}} {{class_name}}::Builder::Finish() { | |
| 62 Data* data = NULL; | |
| 63 std::swap(data, data_); | |
| 64 return mojo::internal::Wrap(data); | |
| 65 } | |
| OLD | NEW |