diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2011-10-01 09:52:53 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2011-10-01 09:52:53 +0100 |
commit | 299396d606fab478ece9fbd4b560ed7fd0b1cdf5 (patch) | |
tree | b5d6d0ba83a6f1e6148c663d5df21849fe5c88eb | |
parent | 5387c383d72937f892efcddc69c6a5c87d37e0c3 (diff) | |
download | rabbitmq-server-299396d606fab478ece9fbd4b560ed7fd0b1cdf5.tar.gz |
refactor: extract gb_trees_fold/3 and gb_trees_foreach/2
-rw-r--r-- | src/rabbit_amqqueue_process.erl | 10 | ||||
-rw-r--r-- | src/rabbit_mirror_queue_slave.erl | 3 | ||||
-rw-r--r-- | src/rabbit_misc.erl | 15 |
3 files changed, 17 insertions, 11 deletions
diff --git a/src/rabbit_amqqueue_process.erl b/src/rabbit_amqqueue_process.erl index f72369fe..fe1ddba0 100644 --- a/src/rabbit_amqqueue_process.erl +++ b/src/rabbit_amqqueue_process.erl @@ -465,17 +465,9 @@ confirm_messages(MsgIds, State = #q{msg_id_to_channel = MTC}) -> {CMs, MTC0} end end, {gb_trees:empty(), MTC}, MsgIds), - gb_trees_foreach(fun rabbit_channel:confirm/2, CMs), + rabbit_misc:gb_trees_foreach(fun rabbit_channel:confirm/2, CMs), State#q{msg_id_to_channel = MTC1}. -gb_trees_foreach(_, none) -> - ok; -gb_trees_foreach(Fun, {Key, Val, It}) -> - Fun(Key, Val), - gb_trees_foreach(Fun, gb_trees:next(It)); -gb_trees_foreach(Fun, Tree) -> - gb_trees_foreach(Fun, gb_trees:next(gb_trees:iterator(Tree))). - should_confirm_message(#delivery{msg_seq_no = undefined}, _State) -> never; should_confirm_message(#delivery{sender = ChPid, diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl index 337740d7..f423760a 100644 --- a/src/rabbit_mirror_queue_slave.erl +++ b/src/rabbit_mirror_queue_slave.erl @@ -417,8 +417,7 @@ confirm_messages(MsgIds, State = #state { msg_id_status = MS }) -> Acc end end, {gb_trees:empty(), MS}, MsgIds), - [ok = rabbit_channel:confirm(ChPid, MsgSeqNos) - || {ChPid, MsgSeqNos} <- gb_trees:to_list(CMs)], + rabbit_misc:gb_trees_foreach(fun rabbit_channel:confirm/2, CMs), State #state { msg_id_status = MS1 }. handle_process_result({ok, State}) -> noreply(State); diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index e685c7d3..b1cf45e7 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -45,6 +45,7 @@ -export([pid_to_string/1, string_to_pid/1]). -export([version_compare/2, version_compare/3]). -export([dict_cons/3, orddict_cons/3, gb_trees_cons/3]). +-export([gb_trees_fold/3, gb_trees_foreach/2]). -export([get_options/2]). -export([all_module_attributes/1, build_acyclic_graph/3]). -export([now_ms/0]). @@ -172,6 +173,9 @@ -spec(dict_cons/3 :: (any(), any(), dict()) -> dict()). -spec(orddict_cons/3 :: (any(), any(), orddict:orddict()) -> orddict:orddict()). -spec(gb_trees_cons/3 :: (any(), any(), gb_tree()) -> gb_tree()). +-spec(gb_trees_fold/3 :: (fun ((any(), any(), A) -> A), A, gb_tree()) -> A). +-spec(gb_trees_foreach/2 :: + (fun ((any(), any()) -> any()), gb_tree()) -> 'ok'). -spec(get_options/2 :: ([optdef()], [string()]) -> {[string()], [{string(), any()}]}). -spec(all_module_attributes/1 :: (atom()) -> [{atom(), [term()]}]). @@ -676,6 +680,17 @@ gb_trees_cons(Key, Value, Tree) -> none -> gb_trees:insert(Key, [Value], Tree) end. +gb_trees_fold(Fun, Acc, Tree) -> + gb_trees_fold1(Fun, Acc, gb_trees:next(gb_trees:iterator(Tree))). + +gb_trees_fold1(_Fun, Acc, none) -> + Acc; +gb_trees_fold1(Fun, Acc, {Key, Val, It}) -> + gb_trees_fold1(Fun, Fun(Key, Val, Acc), gb_trees:next(It)). + +gb_trees_foreach(Fun, Tree) -> + gb_trees_fold(fun (Key, Val, Acc) -> Fun(Key, Val), Acc end, ok, Tree). + %% Separate flags and options from arguments. %% get_options([{flag, "-q"}, {option, "-p", "/"}], %% ["set_permissions","-p","/","guest", |