ascii_set.odin 426 B

12345678910111213141516171819202122
  1. //+private
  2. package strings
  3. import "core:unicode/utf8"
  4. Ascii_Set :: distinct [8]u32
  5. ascii_set_make :: proc(chars: string) -> (as: Ascii_Set, ok: bool) #no_bounds_check {
  6. for i in 0..<len(chars) {
  7. c := chars[i]
  8. if c >= utf8.RUNE_SELF {
  9. return
  10. }
  11. as[c>>5] |= 1 << uint(c&31)
  12. }
  13. ok = true
  14. return
  15. }
  16. ascii_set_contains :: proc(as: Ascii_Set, c: byte) -> bool #no_bounds_check {
  17. return as[c>>5] & (1<<(c&31)) != 0
  18. }