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