From c39f782deb377c9e500817af57cf0b1cbffb695f Mon Sep 17 00:00:00 2001 From: Joe Thornber Date: Fri, 2 Sep 2011 14:28:42 +0100 Subject: [PATCH] reset the last_leaf counts every time we enter a new subtree --- btree_checker.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/btree_checker.h b/btree_checker.h index 9bfbadc..78d1d0d 100644 --- a/btree_checker.h +++ b/btree_checker.h @@ -78,6 +78,9 @@ namespace persistent_data { if (already_visited(n)) return false; + if (!key) + new_root(level); + check_block_nr(n); check_max_entries(n); check_nr_entries(n, !key); @@ -92,12 +95,16 @@ namespace persistent_data { if (already_visited(n)) return false; + if (!key) + new_root(level); + check_block_nr(n); check_max_entries(n); check_nr_entries(n, !key); check_ordered_keys(n); check_parent_key(key, n); check_leaf_key(level, n); + return true; } @@ -107,6 +114,9 @@ namespace persistent_data { if (already_visited(n)) return false; + if (!key) + new_root(level); + check_block_nr(n); check_max_entries(n); check_nr_entries(n, !key); @@ -239,6 +249,12 @@ namespace persistent_data { last_leaf_key_[level] = n.key_at(n.get_nr_entries() - 1); } + void new_root(unsigned level) { + // we're starting a new subtree, so should + // reset the last_leaf value. + last_leaf_key_[level] = boost::optional(); + } + block_counter &counter_; std::set seen_; error_set::ptr errs_;