aboutsummaryrefslogtreecommitdiff
path: root/gen/src/gleam@map_dict.erl
blob: 77eaf790bf0f06158a192cfc6320ea53b103d821 (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
83
84
85
86
87
88
89
-module(gleam@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) ->
    gleam@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).