diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2011-11-30 10:36:01 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2011-11-30 10:36:01 +0000 |
commit | 7ca7f099e87a7c4ca5c7e552af9edc3d67602424 (patch) | |
tree | 72e567b43987e2ebc37f6883025bae8f457be6fe | |
parent | 072ced71211c632e91de067618a521600770c9a0 (diff) | |
download | rabbitmq-server-7ca7f099e87a7c4ca5c7e552af9edc3d67602424.tar.gz |
simplify
-rw-r--r-- | src/rabbit_exchange_type_topic.erl | 24 |
1 files changed, 6 insertions, 18 deletions
diff --git a/src/rabbit_exchange_type_topic.erl b/src/rabbit_exchange_type_topic.erl index b675cd4d..dcdaec2d 100644 --- a/src/rabbit_exchange_type_topic.erl +++ b/src/rabbit_exchange_type_topic.erl @@ -212,7 +212,7 @@ trie_bindings(X, Node) -> destination = '$1'}}, mnesia:select(rabbit_topic_trie_binding, [{MatchHead, [], ['$1']}]). -trie_update_node(X, Node, Fun) -> +trie_update_node_counts(X, Node, Field, Delta) -> E = case mnesia:read(rabbit_topic_trie_node, #trie_node{exchange_name = X, node_id = Node}, write) of @@ -223,7 +223,7 @@ trie_update_node(X, Node, Fun) -> binding_count = 0}; [E0] -> E0 end, - case Fun(E) of + case setelement(Field, E, element(Field, E) + Delta) of #topic_trie_node{edge_count = 0, binding_count = 0} -> ok = mnesia:delete_object(rabbit_topic_trie_node, E, write); EN -> @@ -231,17 +231,11 @@ trie_update_node(X, Node, Fun) -> end. trie_add_edge(X, FromNode, ToNode, W) -> - trie_update_node(X, FromNode, - fun(E = #topic_trie_node{edge_count = C}) -> - E#topic_trie_node{edge_count = C + 1} - end), + trie_update_node_counts(X, FromNode, #topic_trie_node.edge_count, +1), trie_edge_op(X, FromNode, ToNode, W, fun mnesia:write/3). trie_remove_edge(X, FromNode, ToNode, W) -> - trie_update_node(X, FromNode, - fun(E = #topic_trie_node{edge_count = C}) -> - E#topic_trie_node{edge_count = C - 1} - end), + trie_update_node_counts(X, FromNode, #topic_trie_node.edge_count, -1), trie_edge_op(X, FromNode, ToNode, W, fun mnesia:delete_object/3). trie_edge_op(X, FromNode, ToNode, W, Op) -> @@ -253,17 +247,11 @@ trie_edge_op(X, FromNode, ToNode, W, Op) -> write). trie_add_binding(X, Node, D) -> - trie_update_node(X, Node, - fun(E = #topic_trie_node{binding_count = C}) -> - E#topic_trie_node{binding_count = C + 1} - end), + trie_update_node_counts(X, Node, #topic_trie_node.binding_count, +1), trie_binding_op(X, Node, D, fun mnesia:write/3). trie_remove_binding(X, Node, D) -> - trie_update_node(X, Node, - fun(E = #topic_trie_node{binding_count = C}) -> - E#topic_trie_node{binding_count = C - 1} - end), + trie_update_node_counts(X, Node, #topic_trie_node.binding_count, -1), trie_binding_op(X, Node, D, fun mnesia:delete_object/3). trie_binding_op(X, Node, D, Op) -> |