void oc_bpt_utl_iter_b( struct Oc_wu *wu_p, struct Oc_bpt_state *s_p, void (*iter_f)(struct Oc_wu *, Oc_bpt_node*), Oc_bpt_node *node_p) { iter_f(wu_p, node_p); if (!oc_bpt_nd_is_leaf(s_p, node_p)) { // An index node, recurse through its children int i; int num_entries = oc_bpt_nd_num_entries(s_p, node_p); Oc_bpt_node *child_node_p; struct Oc_bpt_key *dummy_key_p; uint64 child_addr; for (i=0; i< num_entries; i++) { oc_bpt_nd_index_get_kth(s_p, node_p, i, &dummy_key_p, &child_addr); child_node_p = oc_bpt_nd_get_for_read(wu_p, s_p, child_addr); oc_bpt_utl_iter_b(wu_p, s_p, iter_f, child_node_p); oc_bpt_nd_release(wu_p, s_p, child_node_p); } } }
void oc_bpt_iter_b( struct Oc_wu *wu_p, struct Oc_bpt_state *s_p, void (*iter_f)(struct Oc_wu *, Oc_bpt_node*)) { oc_bpt_trace_wu_lvl(2, OC_EV_BPT_ITER, wu_p, "tid=%Lu", s_p->tid); oc_utl_trk_crt_lock_write(wu_p, &s_p->lock); oc_bpt_utl_iter_b(wu_p, s_p, iter_f, s_p->root_node_p); oc_utl_trk_crt_unlock(wu_p, &s_p->lock); }