m_child_size_blocks = level_factor;
- BitMapArea **children = new BitMapArea*[num_child];
+ std::vector<BitMapArea*> children;
+ children.reserve(num_child);
int i = 0;
for (i = 0; i < num_child - 1; i++) {
if (m_level <= 2) {
- children[i] = new BitMapAreaLeaf(cct, m_child_size_blocks, i, def);
+ children.push_back(new BitMapAreaLeaf(cct, m_child_size_blocks, i, def));
} else {
- children[i] = new BitMapAreaIN(cct, m_child_size_blocks, i, def);
+ children.push_back(new BitMapAreaIN(cct, m_child_size_blocks, i, def));
}
total_blocks -= m_child_size_blocks;
}
int last_level = BitMapArea::get_level(cct, total_blocks);
if (last_level == 1) {
- children[i] = new BitMapAreaLeaf(cct, total_blocks, i, def);
+ children.push_back(new BitMapAreaLeaf(cct, total_blocks, i, def));
} else {
- children[i] = new BitMapAreaIN(cct, total_blocks, i, def);
+ children.push_back(new BitMapAreaIN(cct, total_blocks, i, def));
}
- BitMapAreaList *list = new BitMapAreaList(children, num_child);
+ BitMapAreaList *list = new BitMapAreaList(std::move(children));
m_child_list = list;
m_num_child = num_child;
}
alloc_assert(num_child);
m_child_size_blocks = total_blocks / num_child;
- BitMapArea **children = new BitMapArea*[num_child];
+ std::vector<BitMapArea*> children;
+ children.reserve(num_child);
for (int i = 0; i < num_child; i++) {
- children[i] = new BitMapZone(cct, m_child_size_blocks, i, def);
+ children.emplace_back(new BitMapZone(cct, m_child_size_blocks, i, def));
}
- BitMapAreaList *list = new BitMapAreaList(children, num_child);
+ BitMapAreaList *list = new BitMapAreaList(std::move(children));
m_child_list = list;
m_num_child = num_child;
delete child;
}
- delete [] list->get_item_list();
delete list;
unlock();
}
}
-/*
- * BitMapArea List related functions
- */
-BitMapAreaList::BitMapAreaList(BitMapArea **list, int64_t len)
-{
- m_items = list;
- m_num_items = len;
- return;
-}
-
/*
* Main allocator functions.
*/
delete child;
}
- delete [] list->get_item_list();
delete list;
unlock();
class BitMapAreaList {
private:
- BitMapArea **m_items;
- int64_t m_num_items;
+ std::vector<BitMapArea*> m_items;
public:
- BitMapArea *get_nth_item(int64_t idx) {
- return m_items[idx];
- }
-
- BitMapArea ** get_item_list() {
- return m_items;
+ BitMapAreaList(std::vector<BitMapArea*>&& m_items)
+ : m_items(std::move(m_items)) {
}
- int64_t size() {
- return m_num_items;
+ BitMapArea *get_nth_item(const int64_t idx) {
+ return m_items[idx];
}
- BitMapAreaList(BitMapArea **list, int64_t len);
- BitMapAreaList(BitMapArea **list, int64_t len, int64_t marker);
- BitMapArea **get_list() {
- return m_items;
+ /* FIXME: we really should use size_t. */
+ int64_t size() const {
+ return m_items.size();
}
};
/*
* BitMapArea Iter tests.
*/
- BitMapArea *area = NULL;
- BitMapArea **children = new BitMapArea*[num_items];
+ BitMapArea *area = nullptr;
+ std::vector<BitMapArea*> children;
+ children.reserve(num_items);
for (i = 0; i < num_items; i++) {
- children[i] = new BitMapAreaLeaf(
+ children.emplace_back(new BitMapAreaLeaf(
g_ceph_context,
- BitMapArea::get_span_size(g_ceph_context), i, false);
+ BitMapArea::get_span_size(g_ceph_context), i, false));
}
off = 0;
- BitMapAreaList *area_list = new BitMapAreaList(children, num_items);
+ BitMapAreaList *area_list = \
+ new BitMapAreaList(std::vector<BitMapArea*>(children));
BmapEntityListIter area_iter = BmapEntityListIter(
area_list, (int64_t) 0);
i = off;
for (i = 0; i < num_items; i++)
delete children[i];
- delete[] children;
delete area_list;
}