{% from 'macros.tmpl' import license, print_if %}
{% from 'fields/field.tmpl' import encode, getter_expression, setter_expression, declare_storage, fieldwise_compare, fieldwise_copy, fieldwise_diff, fieldwise_pointer_compare_inherited %}
{% from 'fields/group.tmpl' import define_field_group_class %}
{{license()}}

#ifndef ComputedStyleBase_h
#define ComputedStyleBase_h

#include "core/style/ComputedStyleConstants.h"
#include "core/CoreExport.h"
#include "core/style/DataRef.h"
#include "core/style/MemberCopy.h"
#include "core/style/StyleDifference.h"
#include "platform/wtf/SizeAssertions.h"
#include "core/layout/LayoutTheme.h"
{% for path in include_paths %}
#include "{{path}}"
{% endfor %}

{# Each field template has macros that we can call to generate specific
   aspects of the field (e.g. getters, setters).
#}
{% import 'fields/keyword.tmpl' as keyword %}
{% import 'fields/primitive.tmpl' as primitive %}
{% import 'fields/monotonic_flag.tmpl' as monotonic_flag %}
{% import 'fields/storage_only.tmpl' as storage_only %}
{% import 'fields/external.tmpl' as external %}
{% from 'fields/field.tmpl' import encode %}
{% set field_templates = {
     'keyword': keyword,
     'primitive': primitive,
     'monotonic_flag': monotonic_flag,
     'storage_only': storage_only, 
     'external': external
   } %}

namespace blink {

struct SameSizeAsComputedStyleBase {
  {% if computed_style.subgroups is defined %}
  void* dataRefs[{{computed_style.subgroups|length}}];
  {% endif %}
  {% for field in computed_style.fields|rejectattr("is_bit_field") %}
  {{field.type_name}} {{field.name}};
  {% endfor %}
  unsigned m_bit_fields[{{computed_style.num_32_bit_words_for_bit_fields}}];
};

// The generated portion of ComputedStyle. For more info, see the header comment
// in ComputedStyle.h.
//
// ComputedStyleBase is a generated class that stores data members or 'fields'
// used in ComputedStyle. These fields can represent CSS properties or internal
// style information.
//
// STORAGE:
//
// Fields are organised in a tree structure, where a node (called a 'group')
// stores a set of fields and a set of pointers to child nodes (called
// 'subgroups'). We can visualise the tree structure with ComputedStyleBase as
// the root node:
//
// ComputedStyleBase (fields: display, vertical-align, ...)
//  |- StyleSurroundData (fields: padding, border, ...)
//  |- StyleBoxData (fields: width, height, ...)
//  |- ...
//  |- StyleRareNonInheritedData (fields: box-shadow, text-overflow, ...)
//      |- StyleFlexibleBoxData (fields: flex-direction, flex-wrap, ...)
//      |- ...
//
// This design saves memory by allowing multiple ComputedStyleBases to share the
// same instance of a subgroup. For example, if a page never uses flex box
// properties, then every ComputedStyleBase can share the same instance of
// StyleFlexibleBoxData. Without this sharing, we would need to allocate a copy
// of all the flex box fields for every ComputedStyleBase. Similarly, when an
// element inherits from its parent, its ComputedStyleBase can simply share all
// of its subgroups with the parent's.
//
// INTERFACE:
//
// The functions generated for a field is determined by its 'template'. For
// example, a field with the 'keyword' template has only one setter, whereas an
// 'external' field has an extra setter that takes an rvalue reference. A list
// of the available templates can be found in CSSProperties.json5.
//
// ComputedStyleBase is a template class to allow it to use functions on
// ComputedStyle. This allows ComputedStyleBase to use hand written functions it
// would otherwise not know about.  It should only be templated with the
// ComputedStyle class and no other class is allowed.
template <class ComputedStyleFinal>
class CORE_EXPORT ComputedStyleBase {
 public:
  inline bool IndependentInheritedEqual(const ComputedStyleBase& o) const {
    return (
        {{fieldwise_compare(computed_style, computed_style.all_fields
            |selectattr("is_property")
            |selectattr("is_inherited")
            |selectattr("is_independent")
            |list
          )|indent(8)}}
        true
    );
  }

  inline bool NonIndependentInheritedEqual(const ComputedStyleBase& o) const {
    return (
        {{fieldwise_compare(computed_style, computed_style.all_fields
            |selectattr("is_property")
            |selectattr("is_inherited")
            |rejectattr("is_independent")
            |list
          )|indent(8)}}
        true
    );
  }

  inline bool InheritedEqual(const ComputedStyleBase& o) const {
    return IndependentInheritedEqual(o) && NonIndependentInheritedEqual(o);
  }

  inline bool NonInheritedEqual(const ComputedStyleBase& o) const {
    return (
        {{fieldwise_compare(computed_style, computed_style.all_fields
            |selectattr("is_property")
            |rejectattr("is_inherited")
            |list
          )|indent(8)}}
        true
    );
  }

  inline bool InheritedDataShared(const ComputedStyleBase& o) const {
    return (
        {{fieldwise_pointer_compare_inherited(computed_style)|indent(8)}}
        true
    );
  }

  enum IsAtShadowBoundary {
    kAtShadowBoundary,
    kNotAtShadowBoundary,
  };

  void InheritFrom(const ComputedStyleBase& other,
                                      IsAtShadowBoundary isAtShadowBoundary) {
    {{fieldwise_copy(computed_style, computed_style.all_fields
        |selectattr("is_property")
        |selectattr("is_inherited")
        |list
      )|indent(4)}}
  }

  void CopyNonInheritedFromCached(
      const ComputedStyleBase& other) {
    {{fieldwise_copy(computed_style, computed_style.all_fields
        |rejectattr("has_custom_compare_and_copy")
        |rejectattr("is_inherited")
        |list
      )|indent(4)}}
  }

  // Copies the values of any independent inherited properties from the parent
  // style that are marked as inherited by this style.
  void PropagateIndependentInheritedProperties(
      const ComputedStyleBase& parentStyle) {
    {% for field in computed_style.all_fields if field.is_property and field.is_independent %}
    if ({{field.is_inherited_method_name}}())
      {{setter_expression(field)}} = parentStyle.{{getter_expression(field)}};
    {% endfor %}
  }

  {% for name, groups_to_diff in diff_functions_map.items() %}
  bool {{name}}(const ComputedStyleFinal& other) const {
    const ComputedStyleFinal& self = static_cast<const ComputedStyleFinal&>(*this);
    {{fieldwise_diff(groups_to_diff)|indent(4)}}
    return false;
  }
  {% endfor %}

  // Fields.
  // TODO(sashab): Remove initialFoo() static methods and update callers to
  // use resetFoo(), which can be more efficient.

  {% for field in computed_style.all_fields|sort(attribute='name') %}
  // {{field.property_name}}
  {{field_templates[field.field_template].decl_public_methods(field)|indent(2)}}

  {% endfor %}
 private:
  {% for subgroup in computed_style.subgroups %}
  {{define_field_group_class(subgroup)|indent(2)}}

  {% endfor %}

 protected:
  // Constructor and destructor are protected so that only the parent class ComputedStyle
  // can instantiate this class.
  ALWAYS_INLINE ComputedStyleBase() :
  {% for field in computed_style.fields %}
      {{field.name}}({{encode(field, field.default_value)}}){{print_if(not loop.last, ',')}}
  {% endfor %}
  {
    static_assert(std::is_same<ComputedStyle, ComputedStyleFinal>::value, "ComputedStyleBase can only be templated with ComputedStyle");
    {% for subgroup in computed_style.subgroups %}
    {{subgroup.member_name}}.Init();
    {% endfor %}
  }

  {% for field in computed_style.all_fields|sort(attribute='name') %}
  {% if field.field_template in ('storage_only', 'monotonic_flag', 'external') %}
  // {{field.property_name}}
  {{field_templates[field.field_template].decl_protected_methods(field)|indent(2)}}

  {% endif %}
  {% endfor %}

  ~ComputedStyleBase() = default;

  // Storage.
  {% for subgroup in computed_style.subgroups %}
  DataRef<{{subgroup.type_name}}> {{subgroup.member_name}};
  {% endfor %}

 private:
  {% for field in computed_style.fields %}
  {{declare_storage(field)}}
  {% endfor %}
};

} // namespace blink

#endif // ComputedStyleBase_h
