VecForeachReverseIdx
- Macro
- October 8, 2025
Table of Contents
VecForeachReverseIdx
VecForeachReverseIdx
Description
Iterate over each element var
of given vector v
at each index idx
into the vector. The variables var
and idx
declared and defined by this macro. idx
will start from v->length - 1 and will go till 0
Parameters
Name | Direction | Description |
---|---|---|
v | in,out | Vector to iterate over. |
var | in | Name of variable to be used which’ll contain value at iterated index idx |
idx | in | Name of variable to be used for iterating over indices. |
Usage example (Cross-references)
// Test VecForeachReverseIdx macro
bool test_vec_foreach_reverse_idx(void) {
WriteFmt("Testing VecForeachReverseIdx\n");
// Create a vector of integers
// Use VecForeachReverseIdx to verify indices are correct in reverse
bool result = true;
VecForeachReverseIdx(&vec, item, idx) {
result = result && (item == values[idx]);
result = result && (VecAt(&vec, idx) == item);
// Make idx go out of bounds in VecForeachReverseIdx by modifying vector during iteration
bool test_vec_foreach_reverse_idx_out_of_bounds_access(void) {
WriteFmt("Testing VecForeachReverseIdx where idx goes out of bounds (should crash)\n");
typedef Vec(int) IntVec;
// VecForeachReverseIdx has explicit bounds checking: if ((idx) >= (v)->length) LOG_FATAL(...)
VecForeachReverseIdx(&vec, val, idx) {
WriteFmt("Accessing idx {} (vec.length={}): {}\n", idx, vec.length, val);
- In
Foreach.h:111
:
/// TAGS: Foreach, Vec, Iteration, Loop, Reverse
///
#define VecForeachReverse(v, var) VecForeachReverseIdx((v), (var), UNPL(iter))
///
- In
Foreach.h:40
:
/// idx[in] : Name of the variable to be used for iterating over indices (i64).
///
#define StrForeachReverseIdx(str, chr, idx) VecForeachReverseIdx((str), (chr), idx)
///
- In
VecInt.c:454
:
if (VecLen(vec) > 0) {
int sum = 0;
VecForeachReverseIdx(vec, item, idx) {
sum += item + (int)idx;
}
- In
VecStr.c:484
:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachReverseIdx(vec, str, idx) {
total_len += ZstrLen(str.data) + idx;
}
- In
VecCharPtr.c:522
:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachReverseIdx(vec, str, idx) {
total_len += strlen(str) + idx;
}