浏览代码

Add fields_iterator proc

Adds a `fields_iterator` proc to `core:strings`
WalterPlinge 3 年之前
父节点
当前提交
5616ff9a40
共有 1 个文件被更改,包括 32 次插入0 次删除
  1. 32 0
      core/strings/strings.odin

+ 32 - 0
core/strings/strings.odin

@@ -1365,3 +1365,35 @@ fields_proc :: proc(s: string, f: proc(rune) -> bool, allocator := context.alloc
 
 	return substrings[:]
 }
+
+
+// fields_iterator returns the first run of characters in s that does not contain white space, defined by unicode.is_space
+// s will then start from any space after the substring, or be a nil string if the substring was the remaining characters
+fields_iterator :: proc(s: ^string) -> (field: string, ok: bool) {
+	start, end := -1, -1
+	for r, offset in s {
+		end = offset
+		if unicode.is_space(r) {
+			if start >= 0 {
+				field = s[start : end]
+				ok = true
+				s^ = s[end:]
+				return
+			}
+		} else {
+			if start < 0 {
+				start = end
+			}
+		}
+	}
+
+	// if either of these are true, the string did not contain any characters
+	if end < 0 || start < 0 {
+		return "", false
+	}
+
+	field = s[:len(s)]
+	ok = true
+	s^ = s[len(s):]
+	return
+}