return;
}
do {
- auto next_p = rt_p;
- ++next_p;
-
if (start < rt_p->first) {
cb(start, rt_p->first - start, false);
start = rt_p->first;
}
auto range_end = std::min(rt_p->second, end);
- _remove_from_tree(rt_p, start, range_end);
+ rt_p = _remove_from_tree(rt_p, start, range_end);
cb(start, range_end - start, true);
start = range_end;
- rt_p = next_p;
} while (rt_p != range_tree.end() && rt_p->first < end && start < end);
if (start < end) {
cb(start, end - start, false);
_remove_from_tree(rt_p, start, end);
}
-void Btree2Allocator::_remove_from_tree(
- Btree2Allocator::range_tree_t::iterator rt_p,
+Btree2Allocator::range_tree_iterator
+Btree2Allocator::_remove_from_tree(
+ Btree2Allocator::range_tree_iterator rt_p,
uint64_t start,
uint64_t end)
{
auto rs_p = rs_tree->find(rs);
ceph_assert(rs_p != rs_tree->end());
- _remove_from_tree(rs_tree, rs_p, rt_p, start, end);
+ return _remove_from_tree(rs_tree, rs_p, rt_p, start, end);
}
-void Btree2Allocator::_remove_from_tree(
+Btree2Allocator::range_tree_iterator
+Btree2Allocator::_remove_from_tree(
Btree2Allocator::range_size_tree_t* rs_tree,
Btree2Allocator::range_size_tree_t::iterator rs_p,
- Btree2Allocator::range_tree_t::iterator rt_p,
+ Btree2Allocator::range_tree_iterator rt_p,
uint64_t start,
uint64_t end)
{
rs.start = end;
__try_insert_range(rs, &rt_p);
}
+ return rt_p;
}
void Btree2Allocator::_try_insert_range(const range_seg_t& rs)
bool Btree2Allocator::__try_insert_range(
const Btree2Allocator::range_seg_t& rs,
- Btree2Allocator::range_tree_t::iterator* rt_p_insert)
+ Btree2Allocator::range_tree_iterator* rt_p_insert)
{
ceph_assert(rs.end > rs.start);
// Check if amount of range_seg_t entries isn't above the threshold,
uint64_t, // end
std::less<uint64_t>,
pool_allocator<std::pair<uint64_t, uint64_t>>>;
+ using range_tree_iterator = range_tree_t::iterator;
range_tree_t range_tree; ///< main range tree
//
range_size_tree_t* tree, uint64_t size);
inline void _remove_from_tree(uint64_t start, uint64_t size);
- inline void _remove_from_tree(range_tree_t::iterator rt_p,
+ inline range_tree_iterator _remove_from_tree(range_tree_iterator rt_p,
uint64_t start, uint64_t end);
- inline void _remove_from_tree(range_size_tree_t* rs_tree,
+ inline range_tree_iterator _remove_from_tree(range_size_tree_t* rs_tree,
range_size_tree_t::iterator rs,
- range_tree_t::iterator rt_p,
+ range_tree_iterator rt_p,
uint64_t start, uint64_t end);
inline void _try_insert_range(const range_seg_t& rs);
inline bool __try_insert_range(const range_seg_t& rs,
- range_tree_t::iterator* insert_pos);
+ range_tree_iterator* insert_pos);
inline void _range_size_tree_add(const range_seg_t& r);
inline void _range_size_tree_rm(const range_seg_t& rs);