/* * __wt_tree_walk_skip -- * Move to the next/previous page in the tree, skipping a certain number * of leaf pages before returning. */ int __wt_tree_walk_skip( WT_SESSION_IMPL *session, WT_REF **refp, uint64_t *skipleafcntp) { /* * Optionally skip leaf pages, the second half. The tree-walk function * didn't have an on-page cell it could use to figure out if the page * was a leaf page or not, it had to acquire the hazard pointer and look * at the page. The tree-walk code never acquires a hazard pointer on a * leaf page without returning it, and it's not trivial to change that. * So, the tree-walk code returns all leaf pages here and we deal with * decrementing the count. */ do { WT_RET(__tree_walk_internal(session, refp, NULL, __tree_walk_skip_count_callback, skipleafcntp, WT_READ_NO_GEN | WT_READ_SKIP_INTL | WT_READ_WONT_NEED)); /* * The walk skipped internal pages, any page returned must be a * leaf page. */ if (*skipleafcntp > 0) --*skipleafcntp; } while (*skipleafcntp > 0); return (0); }
/* * __wt_tree_walk_count -- * Move to the next/previous page in the tree, tracking how many * references were visited to get there. */ int __wt_tree_walk_count(WT_SESSION_IMPL *session, WT_REF **refp, uint64_t *walkcntp, uint32_t flags) { return (__tree_walk_internal( session, refp, walkcntp, NULL, NULL, flags)); }
/* * __wt_tree_walk_custom_skip -- * Walk the tree calling a custom function to decide whether to skip refs. */ int __wt_tree_walk_custom_skip( WT_SESSION_IMPL *session, WT_REF **refp, int (*skip_func)(WT_SESSION_IMPL *, WT_REF *, void *, bool *), void *func_cookie, uint32_t flags) { return (__tree_walk_internal( session, refp, NULL, skip_func, func_cookie, flags)); }
/* * __wt_tree_walk_skip -- * Move to the next/previous page in the tree, skipping a certain number * of leaf pages before returning. */ int __wt_tree_walk_skip(WT_SESSION_IMPL *session, WT_REF **refp, uint64_t *skipleafcntp, uint32_t flags) { return (__tree_walk_internal(session, refp, NULL, skipleafcntp, flags)); }