VecInsertRangeR
Description
Insert a contiguous range of elements at the given index, preserving order. R-value form: the source range is treated as read-only input and is not zeroed.
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in,out | Vector handle. |
varr |
in | Pointer to the source array. Must be non-NULL when count > 0. |
idx |
in | Position in [0, length]. |
count |
in | Number of elements to insert. |
Success
Returns true. The vector length grows by count; copies of the source elements now occupy indices [idx, idx + count); previous elements at and after idx have shifted right by count. The source range is untouched.
Failure
Returns false on allocation failure. The vector is unchanged.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Insert.h:284:
/// TAGS: Vec, PushBack, Range, RValue
///
#define VecPushBackArrR(v, arr, count) VecInsertRangeR((v), (arr), (v)->length, (count))
///
- In
Insert.h:327:
/// TAGS: Vec, PushFront, Range, RValue
///
#define VecPushFrontArrR(v, arr, count) VecInsertRangeR((v), (arr), 0, (count))
///
- In
Insert.h:674:
#define VecMustInsertRangeR(v, varr, idx, count) \
do { \
if (!VecInsertRangeR((v), (varr), (idx), (count))) { \
LOG_FATAL("VecMustInsertRangeR failed"); \
} \- In
Insert.h:85:
#define StrInsertMany(...) OVERLOAD(StrInsertMany, __VA_ARGS__)
#define StrInsertMany_3(str, zstr, idx) \
_Generic((zstr), Zstr: VecInsertRangeR((str), (Zstr)(zstr), (idx), ZstrLen((Zstr)(zstr))), char *: VecInsertRangeR((str), (Zstr)(zstr), (idx), ZstrLen((Zstr)(zstr))))
#define StrInsertMany_4(str, cstr, cstr_len, idx) \
_Generic((cstr), Zstr: VecInsertRangeR((str), (Zstr)(cstr), (idx), (cstr_len)), char *: VecInsertRangeR((str), (Zstr)(cstr), (idx), (cstr_len)))- In
Insert.h:87:
_Generic((zstr), Zstr: VecInsertRangeR((str), (Zstr)(zstr), (idx), ZstrLen((Zstr)(zstr))), char *: VecInsertRangeR((str), (Zstr)(zstr), (idx), ZstrLen((Zstr)(zstr))))
#define StrInsertMany_4(str, cstr, cstr_len, idx) \
_Generic((cstr), Zstr: VecInsertRangeR((str), (Zstr)(cstr), (idx), (cstr_len)), char *: VecInsertRangeR((str), (Zstr)(cstr), (idx), (cstr_len)))
///
- In
Insert.h:523:
/// TAGS: Str, Insert, Range, RValue
///
#define StrInsertRangeR(str, varr, idx, count) VecInsertRangeR((str), (varr), (idx), (count))
///
- In
VecInt.c:181:
values[i] = (i32)extract_u32(data, offset, data_size);
}
VecInsertRangeR(vec, values, idx, count);
}
break;- In
Insert.c:265:
// Push an array at a specific index
int values[] = {30, 40, 50};
VecInsertRangeR(&vec, values, 1, 3);
// Check length
- In
Insert.c:302:
// Insert range in the middle
VecInsertRangeR(&vec, VecBegin(&src), 1, VecLen(&src));
// Check length
- In
Insert.c:1407:
for (size i = 0; i < n; i++) {
TrackItem it = {tags[i], NULL};
VecInsertRangeR(&v, &it, VecLen(&v), 1);
}
return v;- In
Insert.c:1419:
u64 one = 1;
bool ret = VecInsertRangeR(&vec, &one, 0, (size)-1);
bool result = (ret == false) && (VecLen(&vec) == 0);- In
Insert.c:1437:
u64 newv = 99;
bool ret = VecInsertRangeR(&vec, &newv, 0, 1);
bool result = ret && (VecLen(&vec) == 4) && (VecAt(&vec, 0) == 99) && (VecAt(&vec, 1) == 10) &&- In
Insert.c:1456:
u64 newv = 77;
bool ret = VecInsertRangeR(&vec, &newv, 0, 1);
// The original at index 0 (11) must survive at index 1 after the insert.
- In
Insert.c:1476:
for (size i = 0; i < N; i++) {
u64 v = (u64)i;
VecInsertRangeR(&vec, &v, VecLen(&vec), 1);
}- In
Insert.c:1480:
u64 newv = 999999;
bool ret = VecInsertRangeR(&vec, &newv, N - 1, 1); // insert just before the last element
bool result = ret && (VecLen(&vec) == N + 1) && (VecAt(&vec, 0) == 0) && (VecAt(&vec, N - 2) == (u64)(N - 2)) &&- In
Insert.c:1501:
reset_tracking(0);
TrackItem it = {100, NULL};
bool ret = VecInsertRangeR(&vec, &it, 0, 1);
bool result = (ret == false) && (ti_deinit_count == 0) && (VecLen(&vec) == 3);- In
Insert.c:1524:
{102, NULL}
};
bool ret = VecInsertRangeR(&vec, items, VecLen(&vec), 3);
bool result = (ret == false) && (ti_deinit_count == 2) && (VecLen(&vec) == 3);- In
Insert.c:1546:
{101, NULL}
};
bool ret = VecInsertRangeR(&vec, items, VecLen(&vec), 2);
bool result = (ret == false) && (ti_deinit_count == 1) && (VecLen(&vec) == 3);- In
Insert.c:1568:
{101, NULL}
};
bool ret = VecInsertRangeR(&vec, items, VecLen(&vec), 2);
bool result = (ret == false) && (ti_deinit_count == 1) && (g_deinit_saw_zero == false) && (VecLen(&vec) == 3);- In
Insert.c:1591:
{102, NULL}
};
bool ret = VecInsertRangeR(&vec, items, VecLen(&vec), 3);
bool result = (ret == false) && (ti_deinit_count == 2) && (VecLen(&vec) == 3);- In
Insert.c:1614:
{102, NULL}
};
bool ret = VecInsertRangeR(&vec, items, 1, 3);
bool result = (ret == false) && (ti_deinit_count == 2) && deinit_tags_contain(100) && deinit_tags_contain(101) &&- In
Insert.c:1637:
{101, NULL}
};
bool ret = VecInsertRangeR(&vec, items, VecLen(&vec), 2);
bool result = (ret == false) && (ti_deinit_count == 1) && (VecLen(&vec) == 3);- In
Insert.c:1656:
reset_tracking(0);
TrackItem it = {100, NULL};
bool ret = VecInsertRangeR(&vec, &it, 1, 1);
bool result = (ret == false) && (VecLen(&vec) == 3) && (VecAt(&vec, 0).tag == 1) && (VecAt(&vec, 1).tag == 2) &&- In
Insert.c:1675:
reset_tracking(0);
TrackItem it = {100, NULL};
bool ret = VecInsertRangeR(&vec, &it, 1, 1);
bool result = (ret == false) && (VecLen(&vec) == 3) && (VecAt(&vec, 0).tag == 1) && (VecAt(&vec, 1).tag == 2) &&- In
Insert.c:1696:
for (size i = 0; i < N; i++) {
TrackItem it = {(int)(i + 1), NULL};
VecInsertRangeR(&vec, &it, VecLen(&vec), 1);
}- In
Insert.c:1702:
reset_tracking(0);
TrackItem it = {-100, NULL};
bool ret = VecInsertRangeR(&vec, &it, N - 1, 1);
bool result = (ret == false) && (VecLen(&vec) == N) && (VecAt(&vec, 0).tag == 1) &&- In
Insert.c:1722:
reset_tracking(0);
TrackItem it = {100, NULL};
bool ret = VecInsertRangeR(&vec, &it, 1, 1);
bool result = (ret == false) && (VecLen(&vec) == 3) && (VecAt(&vec, 0).tag == 1) && (VecAt(&vec, 1).tag == 2) &&- In
Insert.c:1918:
g_fail_at = 1;
Elem add[2] = {{.value = 1000}, {.value = 2000}};
bool ok = VecInsertRangeR(&vec, add, 1, 2);
bool result = (ok == false) && (VecLen(&vec) == length_before);
Last updated on