added 'arr_find', 'arr_contains' and did small fixes to 'find' and 'rfind'

This commit is contained in:
IgorCielniak
2026-03-25 11:52:45 +01:00
parent d639c63fd3
commit a74c4b8c41
2 changed files with 21 additions and 2 deletions

View File

@@ -326,3 +326,22 @@ word dyn_arr_sorted
dyn_arr_clone
dyn_arr_sort
end
# arr_contains [*, addr | x] -> [* | bool]
word arr_contains
over @ >r >r 8 + r> r>
for
2dup swap @ == if 1 nip nip rdrop ret end
swap 8 + swap
end 0 nip nip
end
# arr_find [*, addr | x] -> [* | bool]
word arr_find
over @ >r >r 8 + r> r>
0 >r
for
2dup swap @ == if rswap r> nip nip rdrop ret end
swap 8 + swap rswap r> 1 + >r rswap
end rdrop -1 nip nip
end

View File

@@ -542,7 +542,7 @@ word find
0 >r 2 pick for
4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end
>r >r >r 1 + r> r> r> rswap r> 1 + >r rswap
end 0 nip nip nip nip
end -1 nip nip nip nip
end
# find the last occurence of a string inside another string, returns the index
@@ -552,5 +552,5 @@ word rfind
2 pick 1 - >r 2 pick for
4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end
>r >r >r 1 - r> r> r> rswap r> 1 - >r rswap
end 0 nip nip nip nip
end -1 nip nip nip nip
end