aboutsummaryrefslogtreecommitdiff
path: root/gen/src/gleam@map.erl
blob: 66b4feb7a084ebc644dd434fe39f2ff57055086e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
-module(gleam@map).
-compile(no_auto_import).

-export([size/1, to_list/1, from_list/1, has_key/2, new/0, get/2, insert/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().

get(A, B) ->
    gleam_stdlib:map_get(A, B).

erl_insert(A, B, C) ->
    maps:put(A, B, C).

insert(Map, Key, Value) ->
    erl_insert(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, Predicate) ->
    erl_filter(Predicate, Map).

erl_take(A, B) ->
    maps:with(A, B).

take(Map, DesiredKeys) ->
    erl_take(DesiredKeys, 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, DisallowedKeys) ->
    gleam@list:fold(DisallowedKeys, Map, fun(Key, Acc) -> delete(Acc, Key) end).

update(Map, Key, Fun) ->
    insert(Map, Key, Fun(get(Map, Key))).

do_fold(List, Initial, Fun) ->
    case List of
        [] ->
            Initial;

        [{K, V} | Tail] ->
            do_fold(Tail, Fun(K, V, Initial), Fun)
    end.

fold(Map, Initial, Fun) ->
    do_fold(to_list(Map), Initial, Fun).