28 T **items,
int *items_num,
int *active_index,
const int index,
void (*destruct_item)(
T *))
30 static_assert(std::is_trivial_v<T>);
34 const int old_items_num = *items_num;
35 const int new_items_num = old_items_num - 1;
37 T *old_items = *items;
40 std::copy_n(old_items, index, new_items);
41 std::copy_n(old_items + index + 1, old_items_num - index - 1, new_items + index);
43 destruct_item(&old_items[index]);
47 *items_num = new_items_num;
50 const int old_active_index = active_index ? *active_index : 0;
51 const int new_active_index = std::max(
52 0, old_active_index == new_items_num ? new_items_num - 1 : old_active_index);
53 *active_index = new_active_index;