26 T **items,
int *items_num,
int *active_index,
const int index,
void (*destruct_item)(
T *))
28 static_assert(std::is_trivial_v<T>);
32 const int old_items_num = *items_num;
33 const int new_items_num = old_items_num - 1;
35 T *old_items = *items;
38 std::copy_n(old_items, index, new_items);
39 std::copy_n(old_items + index + 1, old_items_num - index - 1, new_items + index);
41 destruct_item(&old_items[index]);
45 *items_num = new_items_num;
48 const int old_active_index = active_index ? *active_index : 0;
49 const int new_active_index = std::max(
50 0, old_active_index == new_items_num ? new_items_num - 1 : old_active_index);
51 *active_index = new_active_index;