From 6d354524e28ffe69f0ce769a4d031035784d8b47 Mon Sep 17 00:00:00 2001 From: Lucas Perlind Date: Mon, 21 Mar 2022 21:17:49 +1100 Subject: [PATCH] * Add split_by_byte_iterator. It functions exactly like split_iterator but takes in a byte seperator rather than a string seperator. The intention is to provide a faster split parsing if the seperator is known to be byte size. --- core/strings/strings.odin | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/strings/strings.odin b/core/strings/strings.odin index 670da166b..fe25ad3bf 100644 --- a/core/strings/strings.odin +++ b/core/strings/strings.odin @@ -339,6 +339,25 @@ _split_iterator :: proc(s: ^string, sep: string, sep_save: int) -> (res: string, return } +@private +_split_by_byte_iterator :: proc(s: ^string, sep: u8) -> (res: string, ok: bool) { + m := index_byte(s^, sep) + if m < 0 { + // not found + res = s[:] + ok = res != "" + s^ = {} + } else { + res = s[:m] + ok = true + s^ = s[m+1:] + } + return +} + +split_by_byte_iterator :: proc(s: ^string, sep: u8) -> (string, bool) { + return _split_by_byte_iterator(s, sep) +} split_iterator :: proc(s: ^string, sep: string) -> (string, bool) { return _split_iterator(s, sep, 0)