{% from 'templates/macros.tmpl' import license, print_if, source_files_for_generated_file %}
{{license()}}

{{source_files_for_generated_file(template_file, input_files)}}

#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_COMPUTED_STYLE_BASE_CONSTANTS_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_COMPUTED_STYLE_BASE_CONSTANTS_H_

namespace blink {

// TODO(sashab): Move these enums to their own namespace, or add a CSS prefix,
// for consistency and to prevent name conflicts.

{% for enum in enums %}
enum class {{enum.type_name}} : unsigned {
  {% for value in enum.values %}
  {{value}}{{print_if(enum.is_set, " = " ~ (0 if loop.first else 2**(loop.index0 - 1)))}},
  {% endfor %}
};

{% if enum.is_set %}
static const int k{{enum.type_name}}Bits = {{enum.values|length - 1}};

{% for op in ('|', '^') %}
inline {{enum.type_name}} operator{{op}}({{enum.type_name}} a, {{enum.type_name}} b) {
  return static_cast<{{enum.type_name}}>(
    static_cast<unsigned>(a) {{op}} static_cast<unsigned>(b)
  );
}
inline {{enum.type_name}}& operator{{op}}=({{enum.type_name}}& a, {{enum.type_name}} b) {
  return a = a {{op}} b;
}

{% endfor %}
{% endif %}
{% endfor %}
}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_COMPUTED_STYLE_BASE_CONSTANTS_H_
