-module(gleamy@map). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([new/1, insert/3, get/2, has_key/2, delete/2, count/1, fold/3, filter/2, merge/2, take/2, from_list/2, to_list/1]). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 15). -spec new(fun((HBY, HBY) -> gleam@order:order())) -> gleamy@red_black_tree_map:map_(HBY, any()). new(Compare) -> gleamy@red_black_tree_map:new(Compare). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 21). -spec insert(gleamy@red_black_tree_map:map_(HCC, HCD), HCC, HCD) -> gleamy@red_black_tree_map:map_(HCC, HCD). insert(Map, Key, Value) -> gleamy@red_black_tree_map:insert(Map, Key, Value). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 26). -spec get(gleamy@red_black_tree_map:map_(HCI, HCJ), HCI) -> {ok, HCJ} | {error, nil}. get(Map, Key) -> gleamy@red_black_tree_map:find(Map, Key). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 31). -spec has_key(gleamy@red_black_tree_map:map_(HCO, any()), HCO) -> boolean(). has_key(Map, Key) -> case gleamy@red_black_tree_map:find(Map, Key) of {ok, _} -> true; {error, _} -> false end. -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 39). -spec delete(gleamy@red_black_tree_map:map_(HCS, HCT), HCS) -> gleamy@red_black_tree_map:map_(HCS, HCT). delete(Map, Key) -> gleamy@red_black_tree_map:delete(Map, Key). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 45). -spec count(gleamy@red_black_tree_map:map_(any(), any())) -> integer(). count(Map) -> gleamy@red_black_tree_map:fold(Map, 0, fun(A, _, _) -> A + 1 end). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 51). -spec fold( gleamy@red_black_tree_map:map_(HDC, HDD), HDG, fun((HDG, HDC, HDD) -> HDG) ) -> HDG. fold(Map, Initial, Reducer) -> gleamy@red_black_tree_map:fold(Map, Initial, Reducer). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 61). -spec filter( gleamy@red_black_tree_map:map_(HDH, HDI), fun((HDH, HDI) -> boolean()) ) -> gleamy@red_black_tree_map:map_(HDH, HDI). filter(Map, Property) -> gleamy@red_black_tree_map:fold( Map, Map, fun(Map@1, K, V) -> case Property(K, V) of true -> Map@1; false -> gleamy@red_black_tree_map:delete(Map@1, K) end end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 72). -spec merge( gleamy@red_black_tree_map:map_(HDN, HDO), gleamy@red_black_tree_map:map_(HDN, HDO) ) -> gleamy@red_black_tree_map:map_(HDN, HDO). merge(Dict, New_entries) -> gleamy@red_black_tree_map:fold( New_entries, Dict, fun(A, K, V) -> gleamy@red_black_tree_map:insert(A, K, V) end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 78). -spec take(gleamy@red_black_tree_map:map_(HDV, HDW), list(HDV)) -> gleamy@red_black_tree_map:map_(HDV, HDW). take(Map, Desired) -> case Desired of [X | Xs] -> case gleamy@red_black_tree_map:find(Map, X) of {ok, V} -> gleamy@red_black_tree_map:insert(take(Map, Xs), X, V); {error, _} -> take(Map, Xs) end; [] -> gleamy@red_black_tree_map:clear(Map) end. -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 91). -spec from_list(list({HEC, HED}), fun((HEC, HEC) -> gleam@order:order())) -> gleamy@red_black_tree_map:map_(HEC, HED). from_list(Members, Compare) -> gleam@list:fold( Members, gleamy@red_black_tree_map:new(Compare), fun(Tree, I) -> gleamy@red_black_tree_map:insert( Tree, erlang:element(1, I), erlang:element(2, I) ) end ). -file("/home/julian/projects/gleamy_structures/src/gleamy/map.gleam", 101). -spec to_list(gleamy@red_black_tree_map:map_(HEH, HEI)) -> list({HEH, HEI}). to_list(Map) -> gleamy@red_black_tree_map:foldr(Map, [], fun(A, K, V) -> [{K, V} | A] end).