| {% macro encode(field, value) %} |
| {% if field.is_bit_field -%} |
| static_cast<unsigned>({{value}}) |
| {%- else -%} |
| {{value}} |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro decode(field, value) %} |
| {% if field.is_bit_field -%} |
| static_cast<{{field.type_name}}>({{value}}) |
| {%- else -%} |
| {{value}} |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro getter_expression(field) %} |
| {% if field.group_member_name -%} |
| {{field.group_member_name}}->{{field.name}} |
| {%- else -%} |
| {{field.name}} |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro setter_expression(field) %} |
| {% if field.group_member_name -%} |
| {{field.group_member_name}}.Access()->{{field.name}} |
| {%- else -%} |
| {{field.name}} |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro set_if_changed(field, value) %} |
| {% if field.group_member_name -%} |
| if (!({{getter_expression(field)}} == {{value}})) |
| {{setter_expression(field)}} = {{value}}; |
| {%- else -%} |
| {{field.name}} = {{value}}; |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro nonconst_ref(field) %} |
| {% if field.is_bit_field or field.field_template == 'primitive' -%} |
| {{field.type_name}} |
| {%- else -%} |
| {{field.type_name}}& |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro const_ref(field) %} |
| {% if field.is_bit_field or field.field_template == 'primitive' -%} |
| {{field.type_name}} |
| {%- else -%} |
| const {{field.type_name}}& |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro declare_storage(field) %} |
| {% if field.is_bit_field %} |
| unsigned {{field.name}} : {{field.size}}; // {{field.type_name}} |
| {%- else %} |
| {{field.type_name}} {{field.name}}; |
| {%- endif %} |
| {% endmacro %} |
| |
| {% macro compare(is_pointer_type, expr, other_name) %} |
| {% if is_pointer_type -%} |
| DataEquivalent({{expr}}, {{other_name}}.{{expr}}) |
| {%- else -%} |
| {{expr}} == {{other_name}}.{{expr}} |
| {%- endif %} |
| {% endmacro %} |
| |
| {# Given a group and a list of fields to compare, this generates a set of |
| equality comparisons on those fields. The generated comparisons take |
| advantage of group sharing. #} |
| {% macro fieldwise_compare(group, fields_to_compare) %} |
| {% for subgroup in group.subgroups %} |
| {# If every field in this subgroup is to be compared, we can compare the |
| group pointer instead. #} |
| {% if subgroup.all_fields|rejectattr("custom_compare")|reject("in", fields_to_compare)|list|length == 0 -%} |
| {{subgroup.member_name}} == o.{{subgroup.member_name}} && |
| {# Otherwise, we would have to recursively generate comparison operations |
| on fields in the subgroup. #} |
| {% elif subgroup.fields|rejectattr("custom_compare")|select("in", fields_to_compare)|list|length > 0 -%} |
| {{fieldwise_compare(subgroup, fields_to_compare)}} |
| {% endif %} |
| {% endfor %} |
| {% for field in group.fields|rejectattr("custom_compare")|select("in", fields_to_compare) -%} |
| {{compare(field.wrapper_pointer_name, getter_expression(field), "o")}} && |
| {% endfor %} |
| {% endmacro %} |
| |
| {% macro fieldwise_copy(group, fields_to_copy) %} |
| {% for subgroup in group.subgroups %} |
| {% if subgroup.all_fields|rejectattr("custom_copy")|reject("in", fields_to_copy)|list|length == 0 -%} |
| {{subgroup.member_name}} = other.{{subgroup.member_name}}; |
| {% elif subgroup.fields|rejectattr("custom_copy")|select("in", fields_to_copy)|list|length > 0 -%} |
| {{fieldwise_copy(subgroup, fields_to_copy)}} |
| {% endif %} |
| {% endfor %} |
| {% for field in group.fields|rejectattr("custom_copy")|select("in", fields_to_copy) -%} |
| {{setter_expression(field)}} = other.{{getter_expression(field)}}; |
| {% endfor %} |
| {% endmacro %} |
| |
| {% macro fieldwise_pointer_compare_inherited(group) %} |
| {% for subgroup in group.subgroups %} |
| {# If every field in this subgroup is inherited, we directly compare the |
| group pointer instead. #} |
| {% if subgroup.all_fields|rejectattr("is_inherited")|list|length == 0 -%} |
| {{subgroup.member_name}}.Get() == o.{{subgroup.member_name}}.Get() && |
| {# Otherwise, we would have to recursively generate comparison operations |
| on fields in the subgroup. #} |
| {% elif subgroup.fields|selectattr("is_inherited")|list|length > 0 -%} |
| {{fieldwise_pointer_compare_inherited(fields_to_compare)}} |
| {% endif %} |
| {% endfor %} |
| {% for field in group.fields if field.is_inherited -%} |
| {{getter_expression(field)}} == o.{{getter_expression(field)}} && |
| {% endfor %} |
| {% endmacro %} |
| |
| {% macro fieldwise_diff(group_to_diff) %} |
| {% for group in group_to_diff.subgroups %} |
| if ({{group.group_name}}.Get() != other.{{group.group_name}}.Get()) { |
| {{fieldwise_diff(group)|indent(2, true)}} |
| } |
| {% endfor %} |
| {% for expression in group_to_diff.expressions %} |
| if (self.{{expression}} != other.{{expression}}) |
| return true; |
| {% endfor %} |
| {% for predicate in group_to_diff.predicates %} |
| if (!self.{{predicate}}) |
| return true; |
| {% endfor %} |
| {% endmacro %} |