Compare commits

...

3 Commits

Author SHA1 Message Date
IgorCielniak
a74c4b8c41 added 'arr_find', 'arr_contains' and did small fixes to 'find' and 'rfind' 2026-03-25 11:52:45 +01:00
IgorCielniak
d639c63fd3 added 'rfind' 2026-03-25 11:12:32 +01:00
IgorCielniak
ab613e644a small fix to 'contains' and added 'find' 2026-03-25 11:05:55 +01:00
2 changed files with 39 additions and 1 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

@@ -531,7 +531,26 @@ end
# contains [*, addr, len, addr | len] -> [* | bool]
word contains
2 pick for
4dup strcmp 1 == if 1 nip nip nip nip ret end
4dup strcmp 1 == if 1 nip nip nip nip rdrop ret end
>r >r >r 1 + r> r> r>
end 0 nip nip nip nip
end
# find the first occurence of a string inside another string, returns the index
# find [*, addr, len, addr | len] -> [* | index]
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 -1 nip nip nip nip
end
# find the last occurence of a string inside another string, returns the index
# rfind [*, addr, len, addr | len] -> [* | index]
word rfind
>r >r dup >r + 1 - r> r> r>
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 -1 nip nip nip nip
end