Browse Source

Add truncate_to_byte and truncate_to_rune for packages strings and bytes

gingerBill 4 years ago
parent
commit
d33350e3a5
2 changed files with 30 additions and 0 deletions
  1. 15 0
      core/bytes/bytes.odin
  2. 15 0
      core/strings/strings.odin

+ 15 - 0
core/bytes/bytes.odin

@@ -16,6 +16,21 @@ ptr_from_slice :: proc(str: []byte) -> ^byte {
 	return d.data;
 }
 
+truncate_to_byte :: proc(str: []byte, b: byte) -> []byte {
+	n := index_byte(str, b);
+	if n < 0 {
+		n = len(str);
+	}
+	return str[:n];
+}
+truncate_to_rune :: proc(str: []byte, r: rune) -> []byte {
+	n := index_rune(str, r);
+	if n < 0 {
+		n = len(str);
+	}
+	return str[:n];
+}
+
 // Compares two strings, returning a value representing which one comes first lexiographically.
 // -1 for `a`; 1 for `b`, or 0 if they are equal.
 compare :: proc(lhs, rhs: []byte) -> int {

+ 15 - 0
core/strings/strings.odin

@@ -33,6 +33,21 @@ unsafe_string_to_cstring :: proc(str: string) -> cstring {
 	return cstring(d.data);
 }
 
+truncate_to_byte :: proc(str: string, b: byte) -> string {
+	n := index_byte(str, b);
+	if n < 0 {
+		n = len(str);
+	}
+	return str[:n];
+}
+truncate_to_rune :: proc(str: string, r: rune) -> string {
+	n := index_rune(str, r);
+	if n < 0 {
+		n = len(str);
+	}
+	return str[:n];
+}
+
 // Compares two strings, returning a value representing which one comes first lexiographically.
 // -1 for `a`; 1 for `b`, or 0 if they are equal.
 compare :: proc(lhs, rhs: string) -> int {