From c8a5d0753d010c2c212aa0fe1a8c62d253406410 Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Thu, 20 Jun 2013 12:17:16 +0100 Subject: [PATCH] [btree] factor out inc_children --- persistent-data/data-structures/btree.h | 4 ++++ persistent-data/data-structures/btree.tcc | 27 ++++++++++++++--------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/persistent-data/data-structures/btree.h b/persistent-data/data-structures/btree.h index d690adb..683aee2 100644 --- a/persistent-data/data-structures/btree.h +++ b/persistent-data/data-structures/btree.h @@ -413,6 +413,10 @@ namespace persistent_data { btree_detail::node_location const &loc, block_address b) const; + template + void inc_children(btree_detail::shadow_spine &spine, + RefCounter &leaf_rc); + typename persistent_data::transaction_manager::ptr tm_; bool destroy_; block_address root_; diff --git a/persistent-data/data-structures/btree.tcc b/persistent-data/data-structures/btree.tcc index 246e068..21a5fdb 100644 --- a/persistent-data/data-structures/btree.tcc +++ b/persistent-data/data-structures/btree.tcc @@ -695,17 +695,7 @@ namespace persistent_data { for (;;) { inc = spine.step(block); - - // FIXME: factor out - { - node_ref nr = spine.template get_node(); - if (nr.get_type() == INTERNAL) - nr.inc_children(internal_rc_); - else { - node_ref leaf = spine.template get_node(); - leaf.inc_children(leaf_rc); - } - } + inc_children(spine, leaf_rc); // patch up the parent to point to the new shadow if (spine.has_parent()) { @@ -820,6 +810,21 @@ namespace persistent_data { v.visit_leaf(loc, ov); } } + + + template + template + void + btree::inc_children(btree_detail::shadow_spine &spine, RefCounter &leaf_rc) + { + node_ref nr = spine.template get_node(); + if (nr.get_type() == INTERNAL) + nr.inc_children(internal_rc_); + else { + node_ref leaf = spine.template get_node(); + leaf.inc_children(leaf_rc); + } + } } //----------------------------------------------------------------