VecPtrAt

Table of Contents

VecPtrAt

Description

Value at given index in a vector. It’s strongly recommended to always use this instead of directly accessing the data.

Parameters

NameDirectionDescription
vinVector to get data from
idxinIndex to get data at

Usage example (Cross-references)

    // Test VecPtrAt function
    bool test_vec_ptr_at(void) {
    WriteFmt("Testing VecPtrAt\n");
    
    // Create a vector of integers
    
    // Get pointers to elements
    int *ptr0 = VecPtrAt(&vec, 0);
    int *ptr1 = VecPtrAt(&vec, 1);
    int *ptr2 = VecPtrAt(&vec, 2);
    // Get pointers to elements
    int *ptr0 = VecPtrAt(&vec, 0);
    int *ptr1 = VecPtrAt(&vec, 1);
    int *ptr2 = VecPtrAt(&vec, 2);
    int *ptr0 = VecPtrAt(&vec, 0);
    int *ptr1 = VecPtrAt(&vec, 1);
    int *ptr2 = VecPtrAt(&vec, 2);
    
    // Check values through pointers
    WriteFmt("Testing BitVecPrefixMatch(NULL, patterns, 1) - should fatal\n");
    BitVecs vp = VecInitWithDeepCopy(NULL, BitVecDeinit);
    BitVecPush(VecPtrAt(&vp, 0), true);
    BitVecPrefixMatch(NULL, &vp);
    VecDeinit(&vp);
    WriteFmt("Testing BitVecSuffixMatch(NULL, patterns, 1) - should fatal\n");
    BitVecs vp = VecInitWithDeepCopy(NULL, BitVecDeinit);
    BitVecPush(VecPtrAt(&vp, 0), true);
    BitVecSuffixMatch(NULL, &vp);
    VecDeinit(&vp);
    BitVecPush(&source, true);
    
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    
    *p0 = BitVecInit();
    BitVecPush(&source, true);
    
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    BitVec *p0 = VecPtrAt(&patterns, 0);
    BitVec *p1 = VecPtrAt(&patterns, 1);
    BitVec *p2 = VecPtrAt(&patterns, 2);
    
    *p0 = BitVecInit();
    if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0)                                                        \
    for (u64 idx = 0, UNPL(d) = 1; UNPL(d); UNPL(d)--)                                                         \
    for (VEC_DATATYPE(UNPL(pv)) *var = NULL; idx < UNPL(pv)->length && (var = VecPtrAt(UNPL(pv), idx), 1); \
    idx++)
    for (u64 idx = UNPL(pv)->length; idx-- > 0 && idx < UNPL(pv)->length;)                                     \
    for (u8 UNPL(run_once) = 1; UNPL(run_once); UNPL(run_once) = 0)                                        \
    for (VEC_DATATYPE(UNPL(pv)) *var = VecPtrAt(UNPL(pv), idx); UNPL(run_once); UNPL(run_once) = 0)
    
    ///
    idx >= UNPL(s) && idx < UNPL(e) && idx < UNPL(pv)->length && UNPL(s) <= UNPL(e);                      \
    ++idx, UNPL(d) = 1)                                                                                   \
    for (VEC_DATATYPE(UNPL(pv)) *var = VecPtrAt(UNPL(pv), idx); UNPL(d); UNPL(d) = 0)
    
    ///
    /// Get pointer to character at given index
    ///
    #define StrCharPtrAt(str, idx) VecPtrAt(str, idx)
    
    #ifdef __cplusplus
    uint16_t idx = extract_u16(data, offset, size);
    if (idx < VecLen(vec)) {
    volatile i32 *ptr = VecPtrAt(vec, idx);
    volatile i32  val = *ptr;
    (void)val;
    if (VecLen(vec) > 0 && *offset + 4 <= size) {
    size_t index = extract_u32(data, offset, size) % VecLen(vec);
    Str   *ptr   = VecPtrAt(vec, index);
    (void)ptr; // Use the result to avoid warnings
    }
    if (VecLen(vec) > 0 && *offset + 4 <= size) {
    size_t index = extract_u32(data, offset, size) % VecLen(vec);
    char **ptr   = VecPtrAt(vec, index);
    (void)ptr; // Use the result to avoid warnings
    }

Share :