diff --git a/btree.tcc b/btree.tcc index 3ff83b9..09e5210 100644 --- a/btree.tcc +++ b/btree.tcc @@ -401,30 +401,8 @@ template typename btree::ptr btree::clone() const { - using namespace btree_detail; - ro_spine spine(tm_); - - spine.step(root_); - write_ref new_root = tm_->new_block(); - - internal_node o = spine.template get_node(); - if (o.get_type() == INTERNAL) { - internal_node n = to_node(new_root); - ::memcpy(n.raw(), o.raw(), MD_BLOCK_SIZE); - - typename uint64_traits::ref_counter rc(internal_rc_); - n.inc_children(rc); - } else { - leaf_node n = to_node(new_root); - ::memcpy(n.raw(), o.raw(), MD_BLOCK_SIZE); - - typename ValueTraits::ref_counter rc(rc_); - n.inc_children(rc); - } - - return btree::ptr( - new btree( - tm_, new_root.get_location(), rc_)); + tm_->get_sm()->inc(root_); + return ptr(new btree(tm_, root_, rc_)); } #if 0