}
leaf.reset();
get_internal(depth_with_space).pos++;
+ // note, cannot result in at_boundary() by construction
return lookup_depth_range(
c, *this, depth_with_space - 1, 0, li, ll, visitor
);
}
ret.leaf.reset();
ret.get_internal(depth_with_space).pos--;
+ // note, cannot result in at_boundary() by construction
return lookup_depth_range(
c, ret, depth_with_space - 1, 0, li, ll, nullptr
).si_then([&ret] {
+ assert(!ret.at_boundary());
return std::move(ret);
});
});
});
}
+ /**
+ * lookup_depth_range
+ *
+ * Performs node lookups on depths [from, to) using li and ll to
+ * specific target at each level. Note, may leave the iterator
+ * at_boundary(), call handle_boundary() prior to returning out
+ * lf LBABtree.
+ */
using lookup_depth_range_iertr = base_iertr;
using lookup_depth_range_ret = lookup_depth_range_iertr::future<>;
template <typename LI, typename LL>
0,
li,
ll,
- visitor);
+ visitor
+ ).si_then([c, visitor, &iter] {
+ if (iter.at_boundary()) {
+ return iter.handle_boundary(c, visitor);
+ } else {
+ return lookup_iertr::now();
+ }
+ });
}).si_then([&iter] {
return std::move(iter);
});