VecForeachPtrIdx
VecForeachPtrIdx
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 0 and will go till v->length - 1
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in,out | Vector to iterate over. |
var |
in | Name of variable to be used which’ll contain pointer to value at iterated index idx |
idx |
in | Name of variable to be used for iterating over indices. |
Usage example (Cross-references)
Usage examples (Cross-references)
- In
VecCharPtr.c:500:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachPtrIdx(vec, str_ptr, idx) {
total_len += strlen(*str_ptr) + idx;
}- In
VecStr.c:462:
if (VecLen(vec) > 0) {
size_t total_len = 0;
VecForeachPtrIdx(vec, str_ptr, idx) {
total_len += strlen(str_ptr->data) + idx;
}- In
VecInt.c:432:
if (VecLen(vec) > 0) {
int sum = 0;
VecForeachPtrIdx(vec, item_ptr, idx) {
sum += *item_ptr + (int)idx;
}- In
BitVec.c:1614:
}
VecForeachPtrIdx(patterns, pattern, i) {
if (BitVecStartsWith(bv, pattern)) {
return i;- In
BitVec.c:1629:
}
VecForeachPtrIdx(patterns, pattern, i) {
if (BitVecEndsWith(bv, pattern)) {
return i; // Test VecForeachPtrIdx macro
bool test_vec_foreach_ptr_idx(void) {
WriteFmt("Testing VecForeachPtrIdx\n");
// Create a vector of integers
// Use VecForeachPtrIdx to set each value to its index
VecForeachPtrIdx(&vec, item_ptr, idx) {
*item_ptr = idx;
} // Make idx go out of bounds in VecForeachPtrIdx by modifying vector during iteration
bool test_vec_foreach_ptr_idx_out_of_bounds_access(void) {
WriteFmt("Testing VecForeachPtrIdx where idx goes out of bounds (should crash)\n");
typedef Vec(int) IntVec;
// VecForeachPtrIdx has explicit bounds checking: if ((idx) >= (v)->length) LOG_FATAL(...)
VecForeachPtrIdx(&vec, val_ptr, idx) {
WriteFmt("Accessing idx {} (vec.length={}): {}\n", idx, vec.length, *val_ptr);- In
Foreach.h:127:
/// TAGS: Foreach, Vec, Iteration, Loop, Pointer
///
#define VecForeachPtr(v, var) VecForeachPtrIdx((v), (var), UNPL(iter))
///
- In
Foreach.h:54:
/// idx[in] : Name of the variable to be used for iterating over indices (i64).
///
#define StrForeachPtrIdx(str, chrptr, idx) VecForeachPtrIdx((str), (chrptr), idx)
///
Last updated on