summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/util/sh_array_util.erl | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/shared/util/sh_array_util.erl b/src/shared/util/sh_array_util.erl index 5f58b36..6d976bc 100644 --- a/src/shared/util/sh_array_util.erl +++ b/src/shared/util/sh_array_util.erl @@ -10,9 +10,12 @@ ( [ any/2, + any_indexed/2, none/2, all/2, + first/2, + mapiff/3 ] ). @@ -35,6 +38,38 @@ any_internals (Fun, Array, PrevIX) -> _ -> any_internals(Fun, Array, IX) end. +-spec first_internals + ( + fun((any()) -> boolean()), + array:array(any()), + non_neg_integer() + ) + -> integer(). +first_internals (_, _, 0) -> + -1; +first_internals (Fun, Array, PrevIX) -> + IX = (PrevIX - 1), + case Fun(array:get(IX, Array)) of + true -> IX; + _ -> first_internals(Fun, Array, IX) + end. + +-spec any_indexed_internals + ( + fun((non_neg_integer(), any()) -> boolean()), + array:array(any()), + non_neg_integer() + ) + -> boolean(). +any_indexed_internals (_, _, 0) -> + false; +any_indexed_internals (Fun, Array, PrevIX) -> + IX = (PrevIX - 1), + case Fun(IX, array:get(IX, Array)) of + true -> true; + _ -> any_indexed_internals(Fun, Array, IX) + end. + -spec all_internals ( fun((any()) -> boolean()), @@ -86,6 +121,18 @@ mapiff_internals (Cond, Map, Array, IXList, PrevIX) -> any (Fun, Array) -> any_internals(Fun, Array, array:size(Array)). +-spec first (fun((any()) -> boolean()), array:array(any())) -> integer(). +first (Fun, Array) -> + first_internals(Fun, Array, array:size(Array)). + +-spec any_indexed + ( + fun((non_neg_integer(), any()) -> boolean()), + array:array(any()) + ) -> boolean(). +any_indexed (Fun, Array) -> + any_indexed_internals(Fun, Array, array:size(Array)). + -spec all (fun((any()) -> boolean()), array:array(any())) -> boolean(). all (Fun, Array) -> all_internals(Fun, Array, array:size(Array)). |