Files
Odin/core/unicode/inrange.odin
2026-03-09 19:48:18 +01:00

46 lines
1004 B
Odin

package unicode
/*
Check to see if the rune `r` is in `range`
*/
in_range :: proc(r: rune, range: Range) -> bool {
if r <= 0xFFFF {
r16 := cast(u16) r
length := len(range.ranges_16)
index := binary_search(r16, range.ranges_16, length/2, 2) if length > 0 else -1
if index >= 0 && range.ranges_16[index] <= r16 && range.ranges_16[index+1] >= r16 {
return true
}
length = len(range.single_16)
index = binary_search(r16, range.single_16, length, 1) if length > 0 else -1
if index >= 0 && range.single_16[index] == r16 {
return true
}
}
r32 := cast(i32) r
length := len(range.ranges_32)
index := binary_search(r32, range.ranges_32, length/2, 2) if length >0 else -1
if index >= 0 && range.ranges_32[index] <= r32 && range.ranges_32[index+1] >= r32 {
return true
}
length = len(range.single_32)
index = binary_search(r32, range.single_32, length, 1) if length > 0 else -1
if index >= 0 && range.single_32[index] == r32 {
return true
}
return false
}