aboutsummaryrefslogtreecommitdiff
path: root/gen/src/std@map_dict.erl
diff options
context:
space:
mode:
Diffstat (limited to 'gen/src/std@map_dict.erl')
-rw-r--r--gen/src/std@map_dict.erl89
1 files changed, 89 insertions, 0 deletions
diff --git a/gen/src/std@map_dict.erl b/gen/src/std@map_dict.erl
new file mode 100644
index 0000000..b736096
--- /dev/null
+++ b/gen/src/std@map_dict.erl
@@ -0,0 +1,89 @@
+-module(std@map_dict).
+-compile(no_auto_import).
+
+-export([size/1, to_list/1, from_list/1, has_key/2, new/0, fetch/2, put/3, map_values/2, keys/1, values/1, filter/2, take/2, merge/2, delete/2, drop/2, update/3, fold/3]).
+
+size(A) ->
+ maps:size(A).
+
+to_list(A) ->
+ maps:to_list(A).
+
+from_list(A) ->
+ maps:from_list(A).
+
+is_key(A, B) ->
+ maps:is_key(A, B).
+
+has_key(Map, Key) ->
+ is_key(Key, Map).
+
+new() ->
+ maps:new().
+
+fetch(A, B) ->
+ gleam__stdlib:map_fetch(A, B).
+
+erl_put(A, B, C) ->
+ maps:put(A, B, C).
+
+put(Map, Key, Value) ->
+ erl_put(Key, Value, Map).
+
+erl_map_values(A, B) ->
+ maps:map(A, B).
+
+map_values(Map, Fun) ->
+ erl_map_values(Fun, Map).
+
+keys(A) ->
+ maps:keys(A).
+
+values(A) ->
+ maps:values(A).
+
+erl_filter(A, B) ->
+ maps:filter(A, B).
+
+filter(Map, Fun) ->
+ erl_filter(Fun, Map).
+
+erl_take(A, B) ->
+ maps:with(A, B).
+
+take(Map, Keys) ->
+ erl_take(Keys, Map).
+
+merge(A, B) ->
+ maps:merge(A, B).
+
+erl_delete(A, B) ->
+ maps:remove(A, B).
+
+delete(Map, Key) ->
+ erl_delete(Key, Map).
+
+drop(Map, Keys) ->
+ std@list:fold(Keys, Map, fun(Key, Acc) -> delete(Acc, Key) end).
+
+update(Dict, Key, F) ->
+ case fetch(Dict, Key) of
+ {ok, Value} ->
+ put(Dict, Key, F({ok, Value}));
+
+ {error, _} ->
+ put(Dict, Key, F({error, not_found}))
+ end.
+
+do_fold(List, Acc, F) ->
+ case List of
+ [] ->
+ Acc;
+
+ [{K, V} | Tail] ->
+ do_fold(Tail, F(K, V, Acc), F)
+ end.
+
+fold(Dict, Acc, F) ->
+ Kvs = to_list(Dict),
+ do_fold(Kvs, Acc, F).