blob: 1060b717626c4938a3f8ed30a7ed4456c7a6839f [file] [log] [blame]
{% from 'templates/macros.tmpl' import license, source_files_for_generated_file %}
{{license()}}
{{source_files_for_generated_file(template_file, input_files)}}
#ifndef CSSValueIDMappingsGenerated_h
#define CSSValueIDMappingsGenerated_h
#include "base/logging.h"
#include "core/CSSValueKeywords.h"
#include "core/ComputedStyleBaseConstants.h"
{% for path in include_paths %}
#include "{{path}}"
{% endfor %}
namespace blink {
// TODO(shend): most enum values are stored contiguously so we just need
// a subtraction and static_cast. This is much faster than switches.
// Do not use these functions directly, use the non-generated versions
// in CSSValueMappings.h
namespace detail {
template <class T>
T cssValueIDToPlatformEnumGenerated(CSSValueID);
{% for enum_name, mapping in mappings.items() %}
{% if 'segment' not in mapping %}
template <>
inline {{enum_name}} cssValueIDToPlatformEnumGenerated(CSSValueID v) {
switch (v) {
{% for cs_value, css_value in mapping['mapping']: %}
case {{css_value}}:
return {{enum_name}}::{{cs_value}};
{% endfor %}
default:
NOTREACHED();
return {{mapping['default_value']}};
}
}
inline CSSValueID platformEnumToCSSValueIDGenerated({{enum_name}} v) {
switch (v) {
{% for cs_value, css_value in mapping['mapping']: %}
case {{enum_name}}::{{cs_value}}:
return {{css_value}};
{% endfor %}
default:
NOTREACHED();
return CSSValueNone;
}
}
{% else %}
template <>
inline {{enum_name}} cssValueIDToPlatformEnumGenerated(CSSValueID v) {
{% if mapping['mapping'] | length > mapping.longest_segment_length %}
switch (v) {
{% for cs_value, cs_num, css_value, css_num in mapping['mapping']: %}
{% if css_num < mapping.start_segment[3] or css_num > mapping.end_segment[3] %}
case {{css_value}}:
return {{enum_name}}::{{cs_value}};
{% endif %}
{% endfor %}
default:
DCHECK_GE(v, {{mapping.start_segment[2]}});
DCHECK_LE(v, {{mapping.end_segment[2]}});
return static_cast<{{enum_name}}>(v - {{mapping.start_segment[2]}} + static_cast<int>({{enum_name}}::{{mapping.start_segment[0]}}));
}
{% else %}
DCHECK_GE(v, {{mapping.start_segment[2]}});
DCHECK_LE(v, {{mapping.end_segment[2]}});
return static_cast<{{enum_name}}>(v - {{mapping.start_segment[2]}} + static_cast<int>({{enum_name}}::{{mapping.start_segment[0]}}));
{% endif %}
}
inline CSSValueID platformEnumToCSSValueIDGenerated({{enum_name}} v) {
{% if mapping['mapping'] | length > mapping.longest_segment_length %}
switch (v) {
{% for cs_value, cs_num, css_value, css_num in mapping['mapping']: %}
{% if cs_num < mapping.start_segment[1] or cs_num > mapping.end_segment[1] %}
case {{enum_name}}::{{cs_value}}:
return {{css_value}};
{% endif %}
{% endfor %}
default:
DCHECK_GE(v, {{enum_name}}::{{mapping.start_segment[0]}});
DCHECK_LE(v, {{enum_name}}::{{mapping.end_segment[0]}});
return static_cast<CSSValueID>(static_cast<int>(v) - static_cast<int>({{enum_name}}::{{mapping.start_segment[0]}}) + static_cast<int>({{mapping.start_segment[2]}}));
}
{% else %}
DCHECK_GE(v, {{enum_name}}::{{mapping.start_segment[0]}});
DCHECK_LE(v, {{enum_name}}::{{mapping.end_segment[0]}});
return static_cast<CSSValueID>(static_cast<int>(v) - static_cast<int>({{enum_name}}::{{mapping.start_segment[0]}}) + static_cast<int>({{mapping.start_segment[2]}}));
{% endif %}
}
{% endif %}
{% endfor %}
} // namespace detail
} // namespace blink
#endif // CSSValueIDMappingsGenerated_h