diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-10-01 15:30:55 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-10-01 15:30:55 +0100 |
commit | 1fe2cedd5033c7145848ca486395b7a1ce3383b9 (patch) | |
tree | 325a8e496b467cf1b7cac6a7dbb785f795ea3dd8 /src/rabbit_vm.erl | |
parent | 569fed6b9652c56616a5c75be5b3220d600ebdb5 (diff) | |
download | rabbitmq-server-1fe2cedd5033c7145848ca486395b7a1ce3383b9.tar.gz |
Simplify.bug26397
Diffstat (limited to 'src/rabbit_vm.erl')
-rw-r--r-- | src/rabbit_vm.erl | 32 |
1 files changed, 10 insertions, 22 deletions
diff --git a/src/rabbit_vm.erl b/src/rabbit_vm.erl index 1e340c0f..4b4a9ed8 100644 --- a/src/rabbit_vm.erl +++ b/src/rabbit_vm.erl @@ -221,8 +221,8 @@ sum_processes(Names, Distinguishers, Items) -> %% these must match whatever is contained in the '$ancestor' process %% dictionary entry. Generally that means for all registered processes %% the name should be used. -sum_processes(Names, Fun, Distinguishers, Specs) -> - Items = [Item || {Item, _Blank0} <- Specs], +sum_processes(Names, Fun, Distinguishers, Acc0) -> + Items = [Item || {Item, _Blank0} <- Acc0], {NameAccs, OtherAcc} = lists:foldl( fun (Pid, Acc) -> @@ -244,9 +244,9 @@ sum_processes(Names, Fun, Distinguishers, Specs) -> false -> Name0 end, accumulate( - Name, Fun, orddict:from_list(Vals), Acc, Specs) + Name, Fun, orddict:from_list(Vals), Acc, Acc0) end - end, {orddict:new(), orddict:new()}, processes()), + end, {orddict:new(), Acc0}, processes()), %% these conversions aren't strictly necessary; we do them simply %% for the sake of encapsulating the representation. {[{Name, orddict:to_list(Accs)} || @@ -264,27 +264,15 @@ find_ancestor(Extra, D, Names) -> {_, [Name | _]} -> Name end. -accumulate(undefined, Fun, ValsDict, {NameAccs, OtherAcc}, Specs) -> - {NameAccs, merge(Fun, ValsDict, OtherAcc, Specs)}; -accumulate(Name, Fun, ValsDict, {NameAccs, OtherAcc}, Specs) -> - F = fun (NameAcc) -> merge(Fun, ValsDict, NameAcc, Specs) end, +accumulate(undefined, Fun, ValsDict, {NameAccs, OtherAcc}, _Acc0) -> + {NameAccs, orddict:merge(Fun, ValsDict, OtherAcc)}; +accumulate(Name, Fun, ValsDict, {NameAccs, OtherAcc}, Acc0) -> + F = fun (NameAcc) -> orddict:merge(Fun, ValsDict, NameAcc) end, {case orddict:is_key(Name, NameAccs) of - true -> orddict:update(Name, F, NameAccs); - false -> orddict:store( Name, F(orddict:new()), NameAccs) + true -> orddict:update(Name, F, NameAccs); + false -> orddict:store( Name, F(Acc0), NameAccs) end, OtherAcc}. -merge(Fun, New, Old, Specs) -> - orddict:fold(fun (K, V, Acc) -> - orddict:store( - K, Fun(K, V, case orddict:find(K, Acc) of - {ok, V0} -> V0; - error -> new_from_spec(K, Specs) - end), Acc) - end, Old, New). - -new_from_spec({K, _}, Specs) -> keyfetch(K, Specs); -new_from_spec(K, Specs) -> keyfetch(K, Specs). - keyfetch(K, L) -> {value, {_, V}} = lists:keysearch(K, 1, L), V. |