whitespace and comment refactoring
This patch replaces tabs with spaces and converts the '%' inline comments (which according to the emacs mode are actually end of line comments) to the mode acceptable '%%' inline comments. Signed-off-by: Jordan Wilberding <diginux@gmail.com>
This commit is contained in:
parent
960548301e
commit
8353035a1e
7 changed files with 182 additions and 182 deletions
|
@ -13,16 +13,16 @@
|
|||
|
||||
%% API
|
||||
-export([new/0,
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
|
||||
-export_type([dictionary/2]).
|
||||
|
||||
|
@ -30,7 +30,7 @@
|
|||
%%% Types
|
||||
%%%===================================================================
|
||||
-opaque dictionary(K, V) :: {ec_assoc_list,
|
||||
[{ec_dictionary:key(K), ec_dictionary:value(V)}]}.
|
||||
[{ec_dictionary:key(K), ec_dictionary:value(V)}]}.
|
||||
|
||||
%%%===================================================================
|
||||
%%% API
|
||||
|
@ -48,26 +48,26 @@ has_key(Key, {ec_assoc_list, Data}) ->
|
|||
ec_dictionary:value(V).
|
||||
get(Key, {ec_assoc_list, Data}) ->
|
||||
case lists:keyfind(Key, 1, Data) of
|
||||
{Key, Value} ->
|
||||
Value;
|
||||
false ->
|
||||
throw(not_found)
|
||||
{Key, Value} ->
|
||||
Value;
|
||||
false ->
|
||||
throw(not_found)
|
||||
end.
|
||||
|
||||
-spec get(ec_dictionary:key(K),
|
||||
ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
ec_dictionary:value(V).
|
||||
ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
ec_dictionary:value(V).
|
||||
get(Key, Default, {ec_assoc_list, Data}) ->
|
||||
case lists:keyfind(Key, 1, Data) of
|
||||
{Key, Value} ->
|
||||
Value;
|
||||
false ->
|
||||
Default
|
||||
{Key, Value} ->
|
||||
Value;
|
||||
false ->
|
||||
Default
|
||||
end.
|
||||
|
||||
-spec add(ec_dictionary:key(K), ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
Object::dictionary(K, V)) ->
|
||||
dictionary(K, V).
|
||||
add(Key, Value, {ec_assoc_list, _Data}=Dict) ->
|
||||
{ec_assoc_list, Rest} = remove(Key,Dict),
|
||||
|
@ -87,7 +87,7 @@ size({ec_assoc_list, Data}) ->
|
|||
length(Data).
|
||||
|
||||
-spec to_list(dictionary(K, V)) -> [{ec_dictionary:key(K),
|
||||
ec_dictionary:value(V)}].
|
||||
ec_dictionary:value(V)}].
|
||||
to_list({ec_assoc_list, Data}) ->
|
||||
Data.
|
||||
|
||||
|
@ -99,5 +99,5 @@ from_list(List) when is_list(List) ->
|
|||
-spec keys(dictionary(K, _V)) -> [ec_dictionary:key(K)].
|
||||
keys({ec_assoc_list, Data}) ->
|
||||
lists:map(fun({Key, _Value}) ->
|
||||
Key
|
||||
end, Data).
|
||||
Key
|
||||
end, Data).
|
||||
|
|
|
@ -15,16 +15,16 @@
|
|||
|
||||
%% API
|
||||
-export([new/0,
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
|
||||
-export_type([dictionary/2]).
|
||||
|
||||
|
@ -49,26 +49,26 @@ has_key(Key, Data) ->
|
|||
ec_dictionary:value(V).
|
||||
get(Key, Data) ->
|
||||
case dict:find(Key, Data) of
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
throw(not_found)
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
throw(not_found)
|
||||
end.
|
||||
|
||||
-spec get(ec_dictionary:key(K),
|
||||
ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
ec_dictionary:value(V).
|
||||
ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
ec_dictionary:value(V).
|
||||
get(Key, Default, Data) ->
|
||||
case dict:find(Key, Data) of
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
Default
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
Default
|
||||
end.
|
||||
|
||||
-spec add(ec_dictionary:key(K), ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
Object::dictionary(K, V)) ->
|
||||
dictionary(K, V).
|
||||
add(Key, Value, Data) ->
|
||||
dict:store(Key, Value, Data).
|
||||
|
@ -81,19 +81,19 @@ remove(Key, Data) ->
|
|||
-spec has_value(ec_dictionary:value(V), Object::dictionary(_K, V)) -> boolean().
|
||||
has_value(Value, Data) ->
|
||||
dict:fold(fun(_, NValue, _) when NValue == Value ->
|
||||
true;
|
||||
(_, _, Acc) ->
|
||||
Acc
|
||||
end,
|
||||
false,
|
||||
Data).
|
||||
true;
|
||||
(_, _, Acc) ->
|
||||
Acc
|
||||
end,
|
||||
false,
|
||||
Data).
|
||||
|
||||
-spec size(Object::dictionary(_K, _V)) -> integer().
|
||||
size(Data) ->
|
||||
dict:size(Data).
|
||||
|
||||
-spec to_list(dictionary(K, V)) -> [{ec_dictionary:key(K),
|
||||
ec_dictionary:value(V)}].
|
||||
ec_dictionary:value(V)}].
|
||||
to_list(Data) ->
|
||||
dict:to_list(Data).
|
||||
|
||||
|
|
|
@ -15,28 +15,28 @@
|
|||
|
||||
%% API
|
||||
-export([new/1,
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/2,
|
||||
keys/1]).
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/2,
|
||||
keys/1]).
|
||||
|
||||
-export_type([dictionary/2,
|
||||
key/1,
|
||||
value/1]).
|
||||
key/1,
|
||||
value/1]).
|
||||
|
||||
%%%===================================================================
|
||||
%%% Types
|
||||
%%%===================================================================
|
||||
|
||||
-record(dict_t,
|
||||
{callback,
|
||||
data}).
|
||||
{callback,
|
||||
data}).
|
||||
|
||||
-opaque dictionary(_K, _V) :: #dict_t{}.
|
||||
-type key(T) :: T.
|
||||
|
|
|
@ -123,10 +123,10 @@ mkdtemp() ->
|
|||
%% @doc Makes a directory including parent dirs if they are missing.
|
||||
-spec mkdir_path(path()) -> ok.
|
||||
mkdir_path(Path) ->
|
||||
% We are exploiting a feature of ensuredir that that creates all
|
||||
% directories up to the last element in the filename, then ignores
|
||||
% that last element. This way we ensure that the dir is created
|
||||
% and not have any worries about path names
|
||||
%% We are exploiting a feature of ensuredir that that creates all
|
||||
%% directories up to the last element in the filename, then ignores
|
||||
%% that last element. This way we ensure that the dir is created
|
||||
%% and not have any worries about path names
|
||||
DirName = filename:join([filename:absname(Path), "tmp"]),
|
||||
try
|
||||
ok = filelib:ensure_dir(DirName)
|
||||
|
@ -343,7 +343,7 @@ setup_base_and_target() ->
|
|||
{BaseDir, SourceDir, {Name1, Name2, Name3, NoName}}.
|
||||
|
||||
find_test() ->
|
||||
% Create a directory in /tmp for the test. Clean everything afterwards
|
||||
%% Create a directory in /tmp for the test. Clean everything afterwards
|
||||
|
||||
{setup,
|
||||
fun setup_base_and_target/0,
|
||||
|
|
|
@ -15,16 +15,16 @@
|
|||
|
||||
%% API
|
||||
-export([new/0,
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
has_key/2,
|
||||
get/2,
|
||||
get/3,
|
||||
add/3,
|
||||
remove/2,
|
||||
has_value/2,
|
||||
size/1,
|
||||
to_list/1,
|
||||
from_list/1,
|
||||
keys/1]).
|
||||
|
||||
-export_type([dictionary/2]).
|
||||
|
||||
|
@ -49,26 +49,26 @@ has_key(Key, Data) ->
|
|||
ec_dictionary:value(V).
|
||||
get(Key, Data) ->
|
||||
case orddict:find(Key, Data) of
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
throw(not_found)
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
throw(not_found)
|
||||
end.
|
||||
|
||||
-spec get(ec_dictionary:key(K),
|
||||
Default::ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
Default::ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
ec_dictionary:value(V).
|
||||
get(Key, Default, Data) ->
|
||||
case orddict:find(Key, Data) of
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
Default
|
||||
{ok, Value} ->
|
||||
Value;
|
||||
error ->
|
||||
Default
|
||||
end.
|
||||
|
||||
-spec add(ec_dictionary:key(K), ec_dictionary:value(V),
|
||||
Object::dictionary(K, V)) ->
|
||||
Object::dictionary(K, V)) ->
|
||||
dictionary(K, V).
|
||||
add(Key, Value, Data) ->
|
||||
orddict:store(Key, Value, Data).
|
||||
|
@ -81,12 +81,12 @@ remove(Key, Data) ->
|
|||
-spec has_value(ec_dictionary:value(V), Object::dictionary(_K, V)) -> boolean().
|
||||
has_value(Value, Data) ->
|
||||
orddict:fold(fun(_, NValue, _) when NValue == Value ->
|
||||
true;
|
||||
(_, _, Acc) ->
|
||||
Acc
|
||||
end,
|
||||
false,
|
||||
Data).
|
||||
true;
|
||||
(_, _, Acc) ->
|
||||
Acc
|
||||
end,
|
||||
false,
|
||||
Data).
|
||||
|
||||
-spec size(Object::dictionary(_K, _V)) -> integer().
|
||||
size(Data) ->
|
||||
|
|
|
@ -111,9 +111,9 @@ map_gather([{Pid, _E} | Rest]) ->
|
|||
receive
|
||||
{Pid, {value, Ret}} ->
|
||||
[Ret|map_gather(Rest)];
|
||||
% timeouts fall here too. Should timeouts be a return value
|
||||
% or an exception? I lean toward return value, but the code
|
||||
% is easier with the exception. Thoughts?
|
||||
%% timeouts fall here too. Should timeouts be a return value
|
||||
%% or an exception? I lean toward return value, but the code
|
||||
%% is easier with the exception. Thoughts?
|
||||
{Pid, Exception} ->
|
||||
killall(Rest),
|
||||
throw(Exception)
|
||||
|
@ -153,9 +153,9 @@ do_f(Parent, F, E) ->
|
|||
Parent ! {self(), {value, Result}}
|
||||
catch
|
||||
_Class:Exception ->
|
||||
% Losing class info here, but since throw does not accept
|
||||
% that arg anyhow and forces a class of throw it does not
|
||||
% matter.
|
||||
%% Losing class info here, but since throw does not accept
|
||||
%% that arg anyhow and forces a class of throw it does not
|
||||
%% matter.
|
||||
Parent ! {self(), Exception}
|
||||
end.
|
||||
|
||||
|
|
|
@ -60,8 +60,8 @@
|
|||
|
||||
%% Standard interface.
|
||||
-export([add/3, from_list/1, get/2, get/3, has_key/2,
|
||||
has_value/2, new/0, remove/2, size/1, to_list/1,
|
||||
keys/1]).
|
||||
has_value/2, new/0, remove/2, size/1, to_list/1,
|
||||
keys/1]).
|
||||
|
||||
-export_type([dictionary/2]).
|
||||
|
||||
|
@ -70,10 +70,10 @@
|
|||
%%%===================================================================
|
||||
|
||||
-opaque dictionary(K, V) :: empty | {color(),
|
||||
dictionary(K, V),
|
||||
ec_dictionary:key(K),
|
||||
ec_dictionary:value(V),
|
||||
dictionary(K, V)}.
|
||||
dictionary(K, V),
|
||||
ec_dictionary:key(K),
|
||||
ec_dictionary:value(V),
|
||||
dictionary(K, V)}.
|
||||
|
||||
-type color() :: r | b.
|
||||
|
||||
|
@ -105,8 +105,8 @@ get(_, {_, _, _, Val, _}) ->
|
|||
Val.
|
||||
|
||||
-spec get(ec_dictionary:key(K),
|
||||
ec_dictionary:value(V),
|
||||
dictionary(K, V)) -> ec_dictionary:value(V).
|
||||
ec_dictionary:value(V),
|
||||
dictionary(K, V)) -> ec_dictionary:value(V).
|
||||
get(_, Default, empty) ->
|
||||
Default;
|
||||
get(K, Default, {_, Left, K1, _, _}) when K < K1 ->
|
||||
|
@ -117,7 +117,7 @@ get(_, _, {_, _, _, Val, _}) ->
|
|||
Val.
|
||||
|
||||
-spec add(ec_dicitonary:key(K), ec_dictionary:value(V),
|
||||
dictionary(K, V)) -> dictionary(K, V).
|
||||
dictionary(K, V)) -> dictionary(K, V).
|
||||
add(Key, Value, Dict) ->
|
||||
{_, L, K1, V1, R} = add1(Key, Value, Dict),
|
||||
{b, L, K1, V1, R}.
|
||||
|
@ -129,9 +129,9 @@ remove(Key, Dictionary) ->
|
|||
-spec has_value(ec_dictionary:value(V), dictionary(_K, V)) -> boolean().
|
||||
has_value(Value, Dict) ->
|
||||
fold(fun (_, NValue, _) when NValue == Value -> true;
|
||||
(_, _, Acc) -> Acc
|
||||
end,
|
||||
false, Dict).
|
||||
(_, _, Acc) -> Acc
|
||||
end,
|
||||
false, Dict).
|
||||
|
||||
-spec size(dictionary(_K, _V)) -> integer().
|
||||
size(T) ->
|
||||
|
@ -146,9 +146,9 @@ to_list(T) ->
|
|||
dictionary(K, V).
|
||||
from_list(L) ->
|
||||
lists:foldl(fun ({K, V}, D) ->
|
||||
add(K, V, D)
|
||||
end, new(),
|
||||
L).
|
||||
add(K, V, D)
|
||||
end, new(),
|
||||
L).
|
||||
|
||||
-spec keys(dictionary(K, _V)) -> [ec_dictionary:key(K)].
|
||||
keys(Dict) ->
|
||||
|
@ -171,59 +171,59 @@ erase_aux(_, empty) ->
|
|||
{empty, false};
|
||||
erase_aux(K, {b, A, Xk, Xv, B}) ->
|
||||
if K < Xk ->
|
||||
{A1, Dec} = erase_aux(K, A),
|
||||
if Dec ->
|
||||
unbalright(b, A1, Xk, Xv, B);
|
||||
true ->
|
||||
{{b, A1, Xk, Xv, B}, false}
|
||||
end;
|
||||
{A1, Dec} = erase_aux(K, A),
|
||||
if Dec ->
|
||||
unbalright(b, A1, Xk, Xv, B);
|
||||
true ->
|
||||
{{b, A1, Xk, Xv, B}, false}
|
||||
end;
|
||||
K > Xk ->
|
||||
{B1, Dec} = erase_aux(K, B),
|
||||
if Dec ->
|
||||
unballeft(b, A, Xk, Xv, B1);
|
||||
true ->
|
||||
{{b, A, Xk, Xv, B1}, false}
|
||||
end;
|
||||
{B1, Dec} = erase_aux(K, B),
|
||||
if Dec ->
|
||||
unballeft(b, A, Xk, Xv, B1);
|
||||
true ->
|
||||
{{b, A, Xk, Xv, B1}, false}
|
||||
end;
|
||||
true ->
|
||||
case B of
|
||||
empty ->
|
||||
blackify(A);
|
||||
_ ->
|
||||
{B1, {Mk, Mv}, Dec} = erase_min(B),
|
||||
if Dec ->
|
||||
unballeft(b, A, Mk, Mv, B1);
|
||||
true ->
|
||||
{{b, A, Mk, Mv, B1}, false}
|
||||
end
|
||||
end
|
||||
case B of
|
||||
empty ->
|
||||
blackify(A);
|
||||
_ ->
|
||||
{B1, {Mk, Mv}, Dec} = erase_min(B),
|
||||
if Dec ->
|
||||
unballeft(b, A, Mk, Mv, B1);
|
||||
true ->
|
||||
{{b, A, Mk, Mv, B1}, false}
|
||||
end
|
||||
end
|
||||
end;
|
||||
erase_aux(K, {r, A, Xk, Xv, B}) ->
|
||||
if K < Xk ->
|
||||
{A1, Dec} = erase_aux(K, A),
|
||||
if Dec ->
|
||||
unbalright(r, A1, Xk, Xv, B);
|
||||
true ->
|
||||
{{r, A1, Xk, Xv, B}, false}
|
||||
end;
|
||||
{A1, Dec} = erase_aux(K, A),
|
||||
if Dec ->
|
||||
unbalright(r, A1, Xk, Xv, B);
|
||||
true ->
|
||||
{{r, A1, Xk, Xv, B}, false}
|
||||
end;
|
||||
K > Xk ->
|
||||
{B1, Dec} = erase_aux(K, B),
|
||||
if Dec ->
|
||||
unballeft(r, A, Xk, Xv, B1);
|
||||
true ->
|
||||
{{r, A, Xk, Xv, B1}, false}
|
||||
end;
|
||||
{B1, Dec} = erase_aux(K, B),
|
||||
if Dec ->
|
||||
unballeft(r, A, Xk, Xv, B1);
|
||||
true ->
|
||||
{{r, A, Xk, Xv, B1}, false}
|
||||
end;
|
||||
true ->
|
||||
case B of
|
||||
empty ->
|
||||
{A, false};
|
||||
_ ->
|
||||
{B1, {Mk, Mv}, Dec} = erase_min(B),
|
||||
if Dec ->
|
||||
unballeft(r, A, Mk, Mv, B1);
|
||||
true ->
|
||||
{{r, A, Mk, Mv, B1}, false}
|
||||
end
|
||||
end
|
||||
case B of
|
||||
empty ->
|
||||
{A, false};
|
||||
_ ->
|
||||
{B1, {Mk, Mv}, Dec} = erase_min(B),
|
||||
if Dec ->
|
||||
unballeft(r, A, Mk, Mv, B1);
|
||||
true ->
|
||||
{{r, A, Mk, Mv, B1}, false}
|
||||
end
|
||||
end
|
||||
end.
|
||||
|
||||
-spec erase_min(dictionary(K, V)) ->
|
||||
|
@ -239,15 +239,15 @@ erase_min({r, empty, Xk, Xv, A}) ->
|
|||
erase_min({b, A, Xk, Xv, B}) ->
|
||||
{A1, Min, Dec} = erase_min(A),
|
||||
if Dec ->
|
||||
{T, Dec1} = unbalright(b, A1, Xk, Xv, B),
|
||||
{T, Min, Dec1};
|
||||
{T, Dec1} = unbalright(b, A1, Xk, Xv, B),
|
||||
{T, Min, Dec1};
|
||||
true -> {{b, A1, Xk, Xv, B}, Min, false}
|
||||
end;
|
||||
erase_min({r, A, Xk, Xv, B}) ->
|
||||
{A1, Min, Dec} = erase_min(A),
|
||||
if Dec ->
|
||||
{T, Dec1} = unbalright(r, A1, Xk, Xv, B),
|
||||
{T, Min, Dec1};
|
||||
{T, Dec1} = unbalright(r, A1, Xk, Xv, B),
|
||||
{T, Min, Dec1};
|
||||
true -> {{r, A1, Xk, Xv, B}, Min, false}
|
||||
end.
|
||||
|
||||
|
@ -259,7 +259,7 @@ unballeft(r, {b, A, Xk, Xv, B}, Yk, Yv, C) ->
|
|||
unballeft(b, {b, A, Xk, Xv, B}, Yk, Yv, C) ->
|
||||
{lbalance(b, {r, A, Xk, Xv, B}, Yk, Yv, C), true};
|
||||
unballeft(b, {r, A, Xk, Xv, {b, B, Yk, Yv, C}}, Zk, Zv,
|
||||
D) ->
|
||||
D) ->
|
||||
{{b, A, Xk, Xv,
|
||||
lbalance(b, {r, B, Yk, Yv, C}, Zk, Zv, D)},
|
||||
false}.
|
||||
|
@ -269,7 +269,7 @@ unbalright(r, A, Xk, Xv, {b, B, Yk, Yv, C}) ->
|
|||
unbalright(b, A, Xk, Xv, {b, B, Yk, Yv, C}) ->
|
||||
{rbalance(b, A, Xk, Xv, {r, B, Yk, Yv, C}), true};
|
||||
unbalright(b, A, Xk, Xv,
|
||||
{r, {b, B, Yk, Yv, C}, Zk, Zv, D}) ->
|
||||
{r, {b, B, Yk, Yv, C}, Zk, Zv, D}) ->
|
||||
{{b, rbalance(b, A, Xk, Xv, {r, B, Yk, Yv, C}), Zk, Zv,
|
||||
D},
|
||||
false}.
|
||||
|
@ -295,25 +295,25 @@ to_list({_, A, Xk, Xv, B}, List) ->
|
|||
|
||||
%% Balance a tree afer (possibly) adding a node to the left/right.
|
||||
-spec lbalance(color(), dictionary(K, V),
|
||||
ec_dictinary:key(K), ec_dictionary:value(V),
|
||||
dictionary(K, V)) ->
|
||||
ec_dictinary:key(K), ec_dictionary:value(V),
|
||||
dictionary(K, V)) ->
|
||||
dictionary(K, V).
|
||||
lbalance(b, {r, {r, A, Xk, Xv, B}, Yk, Yv, C}, Zk, Zv,
|
||||
D) ->
|
||||
D) ->
|
||||
{r, {b, A, Xk, Xv, B}, Yk, Yv, {b, C, Zk, Zv, D}};
|
||||
lbalance(b, {r, A, Xk, Xv, {r, B, Yk, Yv, C}}, Zk, Zv,
|
||||
D) ->
|
||||
D) ->
|
||||
{r, {b, A, Xk, Xv, B}, Yk, Yv, {b, C, Zk, Zv, D}};
|
||||
lbalance(C, A, Xk, Xv, B) -> {C, A, Xk, Xv, B}.
|
||||
|
||||
-spec rbalance(color(), dictionary(K, V),
|
||||
ec_dictinary:key(K), ec_dictionary:value(V),
|
||||
dictionary(K, V)) ->
|
||||
ec_dictinary:key(K), ec_dictionary:value(V),
|
||||
dictionary(K, V)) ->
|
||||
dictionary(K, V).
|
||||
rbalance(b, A, Xk, Xv,
|
||||
{r, {r, B, Yk, Yv, C}, Zk, Zv, D}) ->
|
||||
{r, {r, B, Yk, Yv, C}, Zk, Zv, D}) ->
|
||||
{r, {b, A, Xk, Xv, B}, Yk, Yv, {b, C, Zk, Zv, D}};
|
||||
rbalance(b, A, Xk, Xv,
|
||||
{r, B, Yk, Yv, {r, C, Zk, Zv, D}}) ->
|
||||
{r, B, Yk, Yv, {r, C, Zk, Zv, D}}) ->
|
||||
{r, {b, A, Xk, Xv, B}, Yk, Yv, {b, C, Zk, Zv, D}};
|
||||
rbalance(C, A, Xk, Xv, B) -> {C, A, Xk, Xv, B}.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue