1{% from 'templates/fields/field.tmpl' import encode, declare_storage, compare %} 2{% from 'templates/macros.tmpl' import print_if %} 3{% macro declare_field_group_class(group): -%} 4{% for subgroup in group.subgroups %} 5{{declare_field_group_class(subgroup)}} 6 7{% endfor %} 8class {{group.type_name}} : public RefCounted<{{group.type_name}}> { 9 public: 10 static scoped_refptr<{{group.type_name}}> Create() { 11 return base::AdoptRef(new {{group.type_name}}); 12 } 13 scoped_refptr<{{group.type_name}}> Copy() const { 14 return base::AdoptRef(new {{group.type_name}}(*this)); 15 } 16 17 bool operator==(const {{group.type_name}}& other) const { 18 return ( 19 {% set boolean_and = joiner("&& ") %} 20 {% for subgroup in group.subgroups %} 21 {{boolean_and()}}{{subgroup.member_name}} == other.{{subgroup.member_name}} 22 {% endfor %} 23 {% for field in group.fields if not field.custom_compare %} 24 {{boolean_and()}}{{compare(field.wrapper_pointer_name, field.name, "other")}} 25 {% endfor %} 26 ); 27 } 28 bool operator!=(const {{group.type_name}}& other) const { return !(*this == other); } 29 30 {% for subgroup in group.subgroups %} 31 DataRef<{{subgroup.type_name}}> {{subgroup.member_name}}; 32 {% endfor %} 33 {% for field in group.fields %} 34 {{declare_storage(field)}} 35 {% endfor %} 36 37 private: 38 {{group.type_name}}(); 39 CORE_EXPORT {{group.type_name}}(const {{group.type_name}}&); 40}; 41{%- endmacro %} 42 43{% macro define_field_group_class(group): -%} 44{% for subgroup in group.subgroups %} 45{{define_field_group_class(subgroup)}} 46 47{% endfor %} 48ComputedStyleBase::{{group.type_name}}::{{group.type_name}}() {{print_if(group.fields|length > 0, ':')}} 49 {% set comma = joiner(", ") %} 50 {% for field in group.fields %} 51 {{comma()}}{{field.name}}({{encode(field, field.default_value)}}) 52 {% endfor %} 53 { 54 {% for subgroup in group.subgroups %} 55 {{subgroup.member_name}}.Init(); 56 {% endfor %} 57 } 58 59ComputedStyleBase::{{group.type_name}}::{{group.type_name}}(const {{group.type_name}}& other) : 60 {% set comma = joiner(", ") %} 61 {% for subgroup in group.subgroups %} 62 {{comma()}}{{subgroup.member_name}}(other.{{subgroup.member_name}}) 63 {% endfor %} 64 {% for field in group.fields %} 65 {% if field.wrapper_pointer_name %} 66 {{comma()}}{{field.name}}(MemberCopy(other.{{field.name}})) 67 {% else %} 68 {{comma()}}{{field.name}}(other.{{field.name}}) 69 {% endif %} 70 {% endfor %} 71 {} 72{%- endmacro %} 73