ascii_set.odin 433 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. }