added 'arr_find', 'arr_contains' and did small fixes to 'find' and 'rfind'
This commit is contained in:
@@ -326,3 +326,22 @@ word dyn_arr_sorted
|
|||||||
dyn_arr_clone
|
dyn_arr_clone
|
||||||
dyn_arr_sort
|
dyn_arr_sort
|
||||||
end
|
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
|
||||||
|
|||||||
@@ -542,7 +542,7 @@ word find
|
|||||||
0 >r 2 pick for
|
0 >r 2 pick for
|
||||||
4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end
|
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
|
>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
|
end
|
||||||
|
|
||||||
# find the last occurence of a string inside another string, returns the index
|
# 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
|
2 pick 1 - >r 2 pick for
|
||||||
4dup strcmp 1 == if rswap r> nip nip nip nip rdrop ret end
|
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
|
>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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user