Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit f721962

Browse filesBrowse files
committed
Add keys/1 and values/1
1 parent 757324f commit f721962
Copy full SHA for f721962

1 file changed

+13-6Lines changed: 13 additions & 6 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/splay_tree.erl‎

Copy file name to clipboardExpand all lines: src/splay_tree.erl
+13-6Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010
%%--------------------------------------------------------------------------------
1111
-export([new/0, store/3, find/2, find_largest/1, find_smallest/1,
1212
take_largest/1, take_smallest/1,
13-
lookup/2, get_value/3, erase/2,
13+
lookup/2, get_value/3, erase/2,
1414
size/1, is_empty/1, update/4, update/3, filter/2, map/2,
15+
keys/1, values/1,
1516
foldl/3, foldr/3, foldl_while/3, foldr_while/3, from_list/1, to_list/1, split/2]).
1617

17-
-export_type([tree/0, tree/2, key/0, value/0,
18+
-export_type([tree/0, tree/2, key/0, value/0,
1819
update_fn/0, map_fn/0, fold_fn/0, fold_while_fn/0, pred_fn/0]).
1920

2021
%%--------------------------------------------------------------------------------
@@ -49,7 +50,7 @@ size(Tree) -> foldl(fun (_, _, Count) -> Count+1 end, 0, Tree).
4950
-spec is_empty(tree()) -> boolean().
5051
is_empty(nil) -> true;
5152
is_empty(_) -> false.
52-
53+
5354
-spec store(key(), value(), tree()) -> tree().
5455
store(Key, Value, Root) ->
5556
case path_to_node(Key, Root) of
@@ -144,7 +145,13 @@ split(BorderKey, Tree) ->
144145
end.
145146

146147
-spec to_list(tree()) -> [{key(),value()}].
147-
to_list(Tree) -> lists:reverse(foldl(fun (K, V, Acc) -> [{K,V}|Acc] end, [], Tree)).
148+
to_list(Tree) -> foldr(fun (K, V, Acc) -> [{K,V}|Acc] end, [], Tree).
149+
150+
-spec keys(tree()) -> [key()].
151+
keys(Tree) -> foldr(fun (K, _, Acc) -> [K|Acc] end, [], Tree).
152+
153+
-spec values(tree()) -> [value()].
154+
values(Tree) -> foldr(fun (_, V, Acc) -> [V|Acc] end, [], Tree).
148155

149156
-spec from_list([{key(),value()}]) -> tree().
150157
from_list(List) -> lists:foldl(fun ({K, V}, Tree) -> store(K, V, Tree) end, new(), List).
@@ -256,7 +263,7 @@ move_smallest_node_to_front(Node, Path) ->
256263
end.
257264

258265
-spec path_to_node(key(), maybe_tree_node()) -> {maybe_tree_node(), [{direction(),tree_node()}]}.
259-
path_to_node(Key, Root) ->
266+
path_to_node(Key, Root) ->
260267
path_to_node(Key, Root, []).
261268

262269
-spec path_to_node(key(), maybe_tree_node(), [{direction(),tree_node()}]) ->
@@ -288,7 +295,7 @@ splay(X, [{Dir, P}]) -> % zig
288295
case Dir of
289296
lft -> rgt(X, lft(P, rgt(X)));
290297
rgt -> lft(X, rgt(P, lft(X)))
291-
end;
298+
end;
292299
splay(X, [{Dir,P}, {Dir,G} | Path]) -> % zig-zig
293300
splay(case Dir of
294301
lft -> rgt(X, rgt_lft(P, lft(G, rgt(P)), rgt(X)));

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.