aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <xramtsov@gmail.com>2009-07-22 06:46:07 +0000
committerEvgeniy Khramtsov <xramtsov@gmail.com>2009-07-22 06:46:07 +0000
commit94a638da8560ecd8e056cc914f061265dc843adf (patch)
treec2e0fb4b7488291308c6f07b69dcfee3fb7cc0f0
parentcaps storage indexed on case insensitive jid (diff)
delete/2 now does not crash when there is nothing to delete. fold/1 added
SVN Revision: 2383
-rw-r--r--src/treap.erl11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/treap.erl b/src/treap.erl
index ab5c4d33f..360f543de 100644
--- a/src/treap.erl
+++ b/src/treap.erl
@@ -32,7 +32,8 @@
delete_root/1,
get_root/1,
lookup/2,
- is_empty/1]).
+ is_empty/1,
+ fold/3]).
empty() ->
nil.
@@ -105,6 +106,8 @@ delete(Key, Tree) ->
HashKey = {erlang:phash2(Key), Key},
delete1(HashKey, Tree).
+delete1(_HashKey, nil) ->
+ nil;
delete1(HashKey, {HashKey1, Priority1, Value1, Left, Right} = Tree) ->
if
HashKey < HashKey1 ->
@@ -162,3 +165,9 @@ lookup1({HashKey1, Priority1, Value1, Left, Right}, HashKey) ->
{ok, Priority1, Value1}
end.
+fold(_F, Acc, nil) ->
+ Acc;
+fold(F, Acc, {{_Hash, Key}, Priority, Value, Left, Right}) ->
+ Acc1 = F({Key, Priority, Value}, Acc),
+ Acc2 = fold(F, Acc1, Left),
+ fold(F, Acc2, Right).