aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaytan <laytanlaats@hotmail.com>2025-07-04 19:02:28 +0200
committerGitHub <noreply@github.com>2025-07-04 19:02:28 +0200
commit86d576f7cc1ceeb7472c18e08e3c74214f26ddc6 (patch)
tree658996ea89c44767e89254e7dcfa5947c63d3e72
parent9da667b95fb9d4c5bc817723e58cc8f26d011299 (diff)
parent5811525592e072aa07eb4b262874da70f2404098 (diff)
Merge pull request #5432 from FourteenBrush/master
Add `slice.suffix_length`
-rw-r--r--core/slice/slice.odin19
1 files changed, 19 insertions, 0 deletions
diff --git a/core/slice/slice.odin b/core/slice/slice.odin
index c328fd267..8337a9728 100644
--- a/core/slice/slice.odin
+++ b/core/slice/slice.odin
@@ -387,6 +387,25 @@ has_prefix :: proc(array: $T/[]$E, needle: T) -> bool where intrinsics.type_is_c
return false
}
+/*
+ return the suffix length common between slices `a` and `b`.
+
+ slice.suffix_length([]u8{1, 2, 3, 4}, []u8{1, 2, 3, 4}) -> 4
+ slice.suffix_length([]u8{1, 2, 3, 4}, []u8{3, 4}) -> 2
+ slice.suffix_length([]u8{1, 2, 3, 4}, []u8{1}) -> 0
+ slice.suffix_length([]u8{1, 2, 3, 4}, []u8{1, 3, 5}) -> 0
+ slice.suffix_length([]u8{3, 4, 5}, []u8{3, 5}) -> 1
+*/
+@(require_results)
+suffix_length :: proc(a, b: $T/[]$E) -> (n: int) where intrinsics.type_is_comparable(E) {
+ len_a, len_b := len(a), len(b)
+ _len := builtin.min(len_a, len_b)
+
+ #no_bounds_check for i := 1; i <= _len && a[len_a - i] == b[len_b - i]; i += 1 {
+ n += 1
+ }
+ return
+}
@(require_results)
has_suffix :: proc(array: $T/[]$E, needle: T) -> bool where intrinsics.type_is_comparable(E) {