VecForeachPtrIdx

Table of Contents

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

NameDirectionDescription
vin,outVector to iterate over.
varinName of variable to be used which’ll contain pointer to value at iterated index idx
idxinName of variable to be used for iterating over indices.

Usage example (Cross-references)

    if (VecLen(vec) > 0) {
    size_t total_len = 0;
    VecForeachPtrIdx(vec, str_ptr, idx) {
    total_len += strlen(*str_ptr) + idx;
    }
    if (VecLen(vec) > 0) {
    size_t total_len = 0;
    VecForeachPtrIdx(vec, str_ptr, idx) {
    total_len += strlen(str_ptr->data) + idx;
    }
    if (VecLen(vec) > 0) {
    int sum = 0;
    VecForeachPtrIdx(vec, item_ptr, idx) {
    sum += *item_ptr + (int)idx;
    }
    }
    
    VecForeachPtrIdx(patterns, pattern, i) {
    if (BitVecStartsWith(bv, pattern)) {
    return i;
    }
    
    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);
    /// TAGS: Foreach, Vec, Iteration, Loop, Pointer
    ///
    #define VecForeachPtr(v, var) VecForeachPtrIdx((v), (var), UNPL(iter))
    
    ///
    /// idx[in]     : Name of the variable to be used for iterating over indices (i64).
    ///
    #define StrForeachPtrIdx(str, chrptr, idx) VecForeachPtrIdx((str), (chrptr), idx)
    
    ///

Share :

Related Posts

bool

bool Description Function pointer type for test functions.

Read More

VecForeachIdx

VecForeachIdx 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

Read More

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

Read More