summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-07-02 18:06:08 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-07-02 18:06:08 +0200
commit668e1ab70b66a44e40922a29225d2835b03190fa (patch)
tree80f7fb37b8588035dd3558e4518ac4aa96df0126 /src/shared/util
parent5f8694f2ecae5084f9ad1332e69403f3f79de4bc (diff)
Working on player defeats...
Diffstat (limited to 'src/shared/util')
-rw-r--r--src/shared/util/sh_array_util.erl47
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)).