25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-11-02 15:27:09 +01:00

delete/2 now does not crash when there is nothing to delete. fold/1 added

SVN Revision: 2385
This commit is contained in:
Evgeniy Khramtsov 2009-07-22 06:52:47 +00:00
parent ee142c5fe1
commit 553969f0fd

View File

@ -32,7 +32,8 @@
delete_root/1, delete_root/1,
get_root/1, get_root/1,
lookup/2, lookup/2,
is_empty/1]). is_empty/1,
fold/3]).
empty() -> empty() ->
nil. nil.
@ -105,6 +106,8 @@ delete(Key, Tree) ->
HashKey = {erlang:phash2(Key), Key}, HashKey = {erlang:phash2(Key), Key},
delete1(HashKey, Tree). delete1(HashKey, Tree).
delete1(_HashKey, nil) ->
nil;
delete1(HashKey, {HashKey1, Priority1, Value1, Left, Right} = Tree) -> delete1(HashKey, {HashKey1, Priority1, Value1, Left, Right} = Tree) ->
if if
HashKey < HashKey1 -> HashKey < HashKey1 ->
@ -162,3 +165,9 @@ lookup1({HashKey1, Priority1, Value1, Left, Right}, HashKey) ->
{ok, Priority1, Value1} {ok, Priority1, Value1}
end. 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).