25 T **items,
int *items_num,
int *active_index,
const int index,
void (*destruct_item)(T *))
27 static_assert(std::is_trivial_v<T>);
31 const int old_items_num = *items_num;
32 const int new_items_num = old_items_num - 1;
34 T *old_items = *items;
35 T *new_items = MEM_cnew_array<T>(new_items_num, __func__);
37 std::copy_n(old_items, index, new_items);
38 std::copy_n(old_items + index + 1, old_items_num - index - 1, new_items + index);
40 destruct_item(&old_items[index]);
44 *items_num = new_items_num;
47 const int old_active_index = active_index ? *active_index : 0;
48 const int new_active_index = std::max(
49 0, old_active_index == new_items_num ? new_items_num - 1 : old_active_index);
50 *active_index = new_active_index;
75inline void move_index(T *items,
const int items_num,
const int from_index,
const int to_index)
77 static_assert(std::is_trivial_v<T>);
84 if (from_index == to_index) {
88 if (from_index < to_index) {
89 const T tmp = items[from_index];
90 for (
int i = from_index; i < to_index; i++) {
91 items[i] = items[i + 1];
93 items[to_index] = tmp;
95 else if (from_index > to_index) {
96 const T tmp = items[from_index];
97 for (
int i = from_index; i > to_index; i--) {
98 items[i] = items[i - 1];
100 items[to_index] = tmp;