3#include "di/container/algorithm/lower_bound.h"
4#include "di/reflect/prelude.h"
7template<di::concepts::Enum Property>
13 constexpr auto contains(c32 code_point)
const ->
bool {
return code_point >=
start && code_point <
end; }
21 return di::strong_ordering::equal;
26 constexpr friend auto tag_invoke(di::Tag<di::reflect>, di::InPlaceType<PropertyRange>) {
34 template<di::concepts::Enum Property, Property fallback>
36 di::Span<PropertyRange<Property>
const>
ranges;
39 auto const* range = di::lower_bound(
ranges, code_point);
40 if (range ==
ranges.end() || !range->contains(code_point)) {
43 return range->property;
Definition default_ignorable_code_point.h:8
Definition property_range.h:8
constexpr friend auto tag_invoke(di::Tag< di::reflect >, di::InPlaceType< PropertyRange >)
Definition property_range.h:26
auto operator==(PropertyRange const &) const -> bool=default
u32 start
Definition property_range.h:9
u32 end
Definition property_range.h:10
constexpr auto contains(c32 code_point) const -> bool
Definition property_range.h:13
Property property
Definition property_range.h:11
constexpr auto operator==(c32 code_point) const -> bool
Definition property_range.h:16
auto operator<=>(PropertyRange const &) const =default
constexpr auto operator<=>(c32 code_point) const
Definition property_range.h:19
Definition property_range.h:35
constexpr auto operator()(c32 code_point) const
Definition property_range.h:38
di::Span< PropertyRange< Property > const > ranges
Definition property_range.h:36