summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2018-12-21 17:23:56 +0100
commita81ff643a823dde57ebd0ed5da8a91fb75d32267 (patch)
treedc7dd9e17bb380d05d446b10e7630db340c5998e /src/shared/util
parentc69fe90821bba84c70b020a2504fe4ed63072158 (diff)
Removes any use of arrays.
Diffstat (limited to 'src/shared/util')
-rw-r--r--src/shared/util/shr_array_util.erl152
-rw-r--r--src/shared/util/shr_lists_util.erl32
2 files changed, 32 insertions, 152 deletions
diff --git a/src/shared/util/shr_array_util.erl b/src/shared/util/shr_array_util.erl
deleted file mode 100644
index 0faff99..0000000
--- a/src/shared/util/shr_array_util.erl
+++ /dev/null
@@ -1,152 +0,0 @@
--module(shr_array_util).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--export
-(
- [
- any/2,
- any_indexed/2,
- none/2,
- all/2,
-
- first/2,
-
- mapiff/3
- ]
-).
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec any_internals
- (
- fun((any()) -> boolean()),
- array:array(any()),
- non_neg_integer()
- )
- -> boolean().
-any_internals (_, _, 0) ->
- false;
-any_internals (Fun, Array, PrevIX) ->
- IX = (PrevIX - 1),
- case Fun(array:get(IX, Array)) of
- true -> true;
- _ -> 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()),
- array:array(any()),
- non_neg_integer()
- )
- -> boolean().
-all_internals (_, _, 0) ->
- true;
-all_internals (Fun, Array, PrevIX) ->
- IX = (PrevIX - 1),
- case Fun(array:get(IX, Array)) of
- true -> any_internals(Fun, Array, IX);
- _ -> false
- end.
-
--spec mapiff_internals
- (
- fun((any()) -> boolean()),
- fun((any()) -> any()),
- array:array(any()),
- list(non_neg_integer()),
- non_neg_integer()
- )
- -> {array:array(any()), list(non_neg_integer())}.
-mapiff_internals (_, _, Array, IXList, 0) ->
- {Array, IXList};
-mapiff_internals (Cond, Map, Array, IXList, PrevIX) ->
- IX = (PrevIX - 1),
- Elem = array:get(IX, Array),
-
- case Cond(Elem) of
- false -> mapiff_internals(Cond, Map, Array, IXList, IX);
- _ ->
- mapiff_internals
- (
- Cond,
- Map,
- array:set(IX, Map(Elem), Array),
- [IX|IXList],
- IX
- )
- end.
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
--spec any (fun((any()) -> boolean()), array:array(any())) -> boolean().
-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)).
-
--spec none (fun((any()) -> boolean()), array:array(any())) -> boolean().
-none (Fun, Array) ->
- not any(Fun, Array).
-
--spec mapiff
- (
- fun((any()) -> boolean()),
- fun((any()) -> any()),
- array:array(any())
- )
- -> {array:array(any()), list(non_neg_integer())}.
-mapiff (Cond, Map, Array) ->
- mapiff_internals(Cond, Map, Array, [], array:size(Array)).
diff --git a/src/shared/util/shr_lists_util.erl b/src/shared/util/shr_lists_util.erl
new file mode 100644
index 0000000..0568692
--- /dev/null
+++ b/src/shared/util/shr_lists_util.erl
@@ -0,0 +1,32 @@
+-module(shr_lists_util).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ %%% Gentoo hasn't marked Erlang/OTP 21 as stable yet, but I'd like to
+ %%% use this function.
+ %%% TODO: remove once lists:search/2 is available.
+ search/2
+ ]
+).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% Copy/pasted from the Erlang OTP's source code...
+search (Pred, [Hd|Tail]) ->
+ case Pred(Hd) of
+ true -> {value, Hd};
+ false -> search(Pred, Tail)
+ end;
+search (Pred, []) when is_function(Pred, 1) ->
+ false.