Skip to content

VecLen

VecLen

Description

Length of vector.

Parameters

Name Direction Description
v in Vector to get length of

Usage example (Cross-references)

Usage examples (Cross-references)
    
            case STR_INIT_FROM_STR : {
                if (VecLen(str) > 0) {
                    Str temp = StrInitFromStr(str);
                    StrDeinit(str);
    
            case STR_DUP : {
                if (VecLen(str) > 0) {
                    Str temp = StrDup(str);
                    StrDeinit(str);
            // Access operations
            case STR_FIRST : {
                if (VecLen(str) > 0) {
                    char first = StrFirst(str);
                    (void)first; // Suppress unused variable warning
    
            case STR_LAST : {
                if (VecLen(str) > 0) {
                    char last = StrLast(str);
                    (void)last; // Suppress unused variable warning
    
            case STR_CHAR_AT : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char   ch  = StrCharAt(str, idx);
            case STR_CHAR_AT : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char   ch  = StrCharAt(str, idx);
                    (void)ch; // Suppress unused variable warning
    
            case STR_CHAR_PTR_AT : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char  *ptr = StrCharPtrAt(str, idx);
            case STR_CHAR_PTR_AT : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char  *ptr = StrCharPtrAt(str, idx);
                    (void)ptr; // Suppress unused variable warning
    
            case STR_LEN : {
                size_t len = VecLen(str);
                (void)len; // Suppress unused variable warning
                break;
            // String operations
            case STR_CMP : {
                if (VecLen(str) > 0) {
                    Str temp   = generate_str_from_input(data, offset, size, 20);
                    int result = StrCmp(str, &temp);
    
            case STR_CMP_CSTR : {
                if (VecLen(str) > 0 && *offset + 1 <= size) {
                    char *cstr = generate_cstring(data, offset, size, 20);
                    if (cstr) {
    
            case STR_CMP_ZSTR : {
                if (VecLen(str) > 0 && *offset + 1 <= size) {
                    char *zstr = generate_cstring(data, offset, size, 20);
                    if (zstr) {
    
            case STR_FIND_STR : {
                if (VecLen(str) > 0) {
                    Str   temp  = generate_str_from_input(data, offset, size, 10);
                    char *found = StrFindStr(str, &temp);
    
            case STR_FIND_ZSTR : {
                if (VecLen(str) > 0 && *offset + 1 <= size) {
                    char *zstr = generate_cstring(data, offset, size, 10);
                    if (zstr) {
    
            case STR_FIND_CSTR : {
                if (VecLen(str) > 0 && *offset + 1 <= size) {
                    char *cstr = generate_cstring(data, offset, size, 10);
                    if (cstr) {
            case STR_INSERT : {
                if (*offset + 3 <= size) {
                    size_t idx = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    char   ch  = (char)extract_u8(data, offset, size);
                    StrInsertCharAt(str, ch, idx);
            case STR_INSERT_CSTR : {
                if (*offset + 3 <= size) {
                    size_t idx  = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    char  *cstr = generate_cstring(data, offset, size, 20);
                    if (cstr) {
            case STR_INSERT_ZSTR : {
                if (*offset + 3 <= size) {
                    size_t idx  = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    char  *zstr = generate_cstring(data, offset, size, 20);
                    if (zstr) {
            case STR_INSERT_STR : {
                if (*offset + 2 <= size) {
                    size_t idx  = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    Str    temp = generate_str_from_input(data, offset, size, 20);
                    StrInsert(str, &temp, idx);
            // Remove operations
            case STR_POP_BACK : {
                if (VecLen(str) > 0) {
                    char ch;
                    StrPopBack(str, &ch);
    
            case STR_POP_FRONT : {
                if (VecLen(str) > 0) {
                    char ch;
                    StrPopFront(str, &ch);
    
            case STR_REMOVE : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char   ch;
            case STR_REMOVE : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    char   ch;
                    StrRemove(str, &ch, idx);
    
            case STR_REMOVE_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
            case STR_REMOVE_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
                    StrRemoveRange(str, (char *)NULL, start, count);
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
                    StrRemoveRange(str, (char *)NULL, start, count);
                }
    
            case STR_DELETE : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    StrDelete(str, idx);
            case STR_DELETE : {
                if (VecLen(str) > 0 && *offset + 2 <= size) {
                    size_t idx = extract_u16(data, offset, size) % VecLen(str);
                    StrDelete(str, idx);
                }
    
            case STR_DELETE_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
            case STR_DELETE_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
                    StrDeleteRange(str, start, count);
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t count = extract_u16(data, offset, size) % (VecLen(str) - start + 1);
                    StrDeleteRange(str, start, count);
                }
    
            case STR_SWAP_ITEMS : {
                if (VecLen(str) > 1 && *offset + 4 <= size) {
                    size_t idx1 = extract_u16(data, offset, size) % VecLen(str);
                    size_t idx2 = extract_u16(data, offset, size) % VecLen(str);
            case STR_SWAP_ITEMS : {
                if (VecLen(str) > 1 && *offset + 4 <= size) {
                    size_t idx1 = extract_u16(data, offset, size) % VecLen(str);
                    size_t idx2 = extract_u16(data, offset, size) % VecLen(str);
                    StrSwapCharAt(str, idx1, idx2);
                if (VecLen(str) > 1 && *offset + 4 <= size) {
                    size_t idx1 = extract_u16(data, offset, size) % VecLen(str);
                    size_t idx2 = extract_u16(data, offset, size) % VecLen(str);
                    StrSwapCharAt(str, idx1, idx2);
                }
            // Foreach operations
            case STR_FOREACH : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeach(str, ch) {
    
            case STR_FOREACH_IDX : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachIdx(str, ch, idx) {
    
            case STR_FOREACH_PTR : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachPtr(str, ch_ptr) {
    
            case STR_FOREACH_PTR_IDX : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachPtrIdx(str, ch_ptr, idx) {
    
            case STR_FOREACH_REVERSE : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachReverse(str, ch) {
    
            case STR_FOREACH_REVERSE_IDX : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachReverseIdx(str, ch, idx) {
    
            case STR_FOREACH_PTR_REVERSE : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachPtrReverse(str, ch_ptr) {
    
            case STR_FOREACH_PTR_REVERSE_IDX : {
                if (VecLen(str) > 0) {
                    size_t total_len = 0;
                    StrForeachReversePtrIdx(str, ch_ptr, idx) {
    
            case STR_FOREACH_IN_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
            case STR_FOREACH_IN_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case STR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
            case STR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case STR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
            case STR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case STR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
            case STR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                if (VecLen(str) > 0 && *offset + 4 <= size) {
                    size_t start = extract_u16(data, offset, size) % VecLen(str);
                    size_t end   = extract_u16(data, offset, size) % (VecLen(str) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_CHAR_PTR_POP_BACK : {
                if (VecLen(vec) > 0) {
                    char *str;
                    VecPopBack(vec, &str);
    
            case VEC_CHAR_PTR_POP_FRONT : {
                if (VecLen(vec) > 0) {
                    char *str;
                    VecPopFront(vec, &str);
            case VEC_CHAR_PTR_INSERT : {
                if (*offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    char  *str   = generate_cstring(data, offset, size, 32);
                    if (str) {
    
            case VEC_CHAR_PTR_REMOVE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str;
            case VEC_CHAR_PTR_REMOVE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str;
                    VecRemove(vec, &str, index);
    
            case VEC_CHAR_PTR_DELETE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDelete(vec, index);
            case VEC_CHAR_PTR_DELETE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDelete(vec, index);
                    // char_ptr_deinit is called automatically by the vector
    
            case VEC_CHAR_PTR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str   = VecAt(vec, index);
            case VEC_CHAR_PTR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str   = VecAt(vec, index);
                    (void)str; // Use the result to avoid warnings
    
            case VEC_CHAR_PTR_LEN : {
                size_t len = VecLen(vec);
                (void)len; // Use the result to avoid warnings
                break;
    
            case VEC_CHAR_PTR_FIRST : {
                if (VecLen(vec) > 0) {
                    char *first = VecFirst(vec);
                    (void)first; // Use the result to avoid warnings
    
            case VEC_CHAR_PTR_LAST : {
                if (VecLen(vec) > 0) {
                    char *last = VecLast(vec);
                    (void)last; // Use the result to avoid warnings
                if (*offset + 4 <= size) {
                    size_t new_size = extract_u32(data, offset, size) % 100; // Limit to reasonable size
                    size_t old_size = VecLen(vec);
    
                    // VecResize automatically handles cleanup of removed elements and
    
            case VEC_CHAR_PTR_SWAP_ITEMS : {
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
            case VEC_CHAR_PTR_SWAP_ITEMS : {
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
                    VecSwapItems(vec, i, j);
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
                    VecSwapItems(vec, i, j);
                }
            case VEC_CHAR_PTR_INSERT_RANGE : {
                if (*offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    size_t count = extract_u32(data, offset, size) % 10; // Limit to reasonable count
    
            case VEC_CHAR_PTR_REMOVE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_CHAR_PTR_REMOVE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRange(vec, (char **)NULL, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRange(vec, (char **)NULL, index, count);
                }
    
            case VEC_CHAR_PTR_DELETE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_CHAR_PTR_DELETE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRange(vec, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRange(vec, index, count);
                }
            case VEC_CHAR_PTR_INSERT_FAST : {
                if (*offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    char  *str   = generate_cstring(data, offset, size, 32);
                    if (str) {
    
            case VEC_CHAR_PTR_REMOVE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str;
            case VEC_CHAR_PTR_REMOVE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char  *str;
                    VecRemoveFast(vec, &str, index);
    
            case VEC_CHAR_PTR_REMOVE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_CHAR_PTR_REMOVE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRangeFast(vec, (char **)NULL, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRangeFast(vec, (char **)NULL, index, count);
                }
    
            case VEC_CHAR_PTR_DELETE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_CHAR_PTR_DELETE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRangeFast(vec, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRangeFast(vec, index, count);
                }
    
            case VEC_CHAR_PTR_BEGIN : {
                if (VecLen(vec) > 0) {
                    char **begin = VecBegin(vec);
                    (void)begin; // Use the result to avoid warnings
    
            case VEC_CHAR_PTR_END : {
                if (VecLen(vec) > 0) {
                    char *end = VecEnd(vec);
                    (void)end; // Use the result to avoid warnings
    
            case VEC_CHAR_PTR_PTR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    char **ptr   = VecPtrAt(vec, index);
            case VEC_CHAR_PTR_PTR_AT : {
                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
            case VEC_CHAR_PTR_INSERT_RANGE_FAST : {
                if (*offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    size_t count = extract_u32(data, offset, size) % 10; // Limit to reasonable count
    
            case VEC_CHAR_PTR_ALIGNED_OFFSET_AT : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    // Note: VecAlignedOffsetAt doesn't take alignment parameter
            case VEC_CHAR_PTR_ALIGNED_OFFSET_AT : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    // Note: VecAlignedOffsetAt doesn't take alignment parameter
                    size_t offset = VecAlignedOffsetAt(vec, index);
    
            case VEC_CHAR_PTR_DELETE_LAST : {
                if (VecLen(vec) > 0) {
                    VecDeleteLast(vec);
                }
    
            case VEC_CHAR_PTR_DELETE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDeleteFast(vec, index);
            case VEC_CHAR_PTR_DELETE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDeleteFast(vec, index);
                }
            // Foreach operations
            case VEC_CHAR_PTR_FOREACH : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeach(vec, str) {
    
            case VEC_CHAR_PTR_FOREACH_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachIdx(vec, str, idx) {
    
            case VEC_CHAR_PTR_FOREACH_PTR : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtr(vec, str_ptr) {
    
            case VEC_CHAR_PTR_FOREACH_PTR_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrIdx(vec, str_ptr, idx) {
    
            case VEC_CHAR_PTR_FOREACH_REVERSE : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachReverse(vec, str) {
    
            case VEC_CHAR_PTR_FOREACH_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachReverseIdx(vec, str, idx) {
    
            case VEC_CHAR_PTR_FOREACH_PTR_REVERSE : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrReverse(vec, str_ptr) {
    
            case VEC_CHAR_PTR_FOREACH_PTR_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrReverseIdx(vec, str_ptr, idx) {
    
            case VEC_CHAR_PTR_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_CHAR_PTR_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_CHAR_PTR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_CHAR_PTR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_CHAR_PTR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_CHAR_PTR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_CHAR_PTR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_CHAR_PTR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_STR_POP_BACK : {
                if (VecLen(vec) > 0) {
                    Str str;
                    VecPopBack(vec, &str);
    
            case VEC_STR_POP_FRONT : {
                if (VecLen(vec) > 0) {
                    Str str;
                    VecPopFront(vec, &str);
            case VEC_STR_INSERT : {
                if (*offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    Str    str   = generate_str_from_input(data, offset, size, 32);
                    VecInsert(vec, str, index);
    
            case VEC_STR_REMOVE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str;
            case VEC_STR_REMOVE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str;
                    VecRemove(vec, &str, index);
    
            case VEC_STR_DELETE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDelete(vec, index);
            case VEC_STR_DELETE : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDelete(vec, index);
                    // StrDeinit is called automatically by the vector
    
            case VEC_STR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str   = VecAt(vec, index);
            case VEC_STR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str   = VecAt(vec, index);
                    (void)str; // Use the result to avoid warnings
    
            case VEC_STR_LEN : {
                size_t len = VecLen(vec);
                (void)len; // Use the result to avoid warnings
                break;
    
            case VEC_STR_FIRST : {
                if (VecLen(vec) > 0) {
                    Str first = VecFirst(vec);
                    (void)first; // Use the result to avoid warnings
    
            case VEC_STR_LAST : {
                if (VecLen(vec) > 0) {
                    Str last = VecLast(vec);
                    (void)last; // Use the result to avoid warnings
                if (*offset + 4 <= size) {
                    size_t new_size = extract_u32(data, offset, size) % 100; // Limit to reasonable size
                    size_t old_size = VecLen(vec);
    
                    // VecResize automatically handles cleanup of removed elements and
    
            case VEC_STR_SWAP_ITEMS : {
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
            case VEC_STR_SWAP_ITEMS : {
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
                    VecSwapItems(vec, i, j);
                if (VecLen(vec) >= 2 && *offset + 8 <= size) {
                    size_t i = extract_u32(data, offset, size) % VecLen(vec);
                    size_t j = extract_u32(data, offset, size) % VecLen(vec);
                    VecSwapItems(vec, i, j);
                }
            case VEC_STR_INSERT_RANGE : {
                if (*offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    size_t count = extract_u32(data, offset, size) % 10; // Limit to reasonable count
    
            case VEC_STR_REMOVE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_STR_REMOVE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRange(vec, (Str *)NULL, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRange(vec, (Str *)NULL, index, count);
                }
    
            case VEC_STR_DELETE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_STR_DELETE_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRange(vec, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRange(vec, index, count);
                }
            case VEC_STR_INSERT_FAST : {
                if (*offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    Str    str   = generate_str_from_input(data, offset, size, 32);
                    VecInsertFast(vec, str, index);
    
            case VEC_STR_REMOVE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str;
            case VEC_STR_REMOVE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str    str;
                    VecRemoveFast(vec, &str, index);
    
            case VEC_STR_REMOVE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_STR_REMOVE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRangeFast(vec, (Str *)NULL, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecRemoveRangeFast(vec, (Str *)NULL, index, count);
                }
    
            case VEC_STR_DELETE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
            case VEC_STR_DELETE_RANGE_FAST : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRangeFast(vec, index, count);
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    size_t count = extract_u32(data, offset, size) % (VecLen(vec) - index + 1);
                    VecDeleteRangeFast(vec, index, count);
                }
    
            case VEC_STR_BEGIN : {
                if (VecLen(vec) > 0) {
                    Str *begin = VecBegin(vec);
                    (void)begin; // Use the result to avoid warnings
    
            case VEC_STR_END : {
                if (VecLen(vec) > 0) {
                    char *end = VecEnd(vec);
                    (void)end; // Use the result to avoid warnings
    
            case VEC_STR_PTR_AT : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    Str   *ptr   = VecPtrAt(vec, index);
            case VEC_STR_PTR_AT : {
                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
            case VEC_STR_INSERT_RANGE_FAST : {
                if (*offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    size_t count = extract_u32(data, offset, size) % 10; // Limit to reasonable count
    
            case VEC_STR_ALIGNED_OFFSET_AT : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    // Note: VecAlignedOffsetAt doesn't take alignment parameter
            case VEC_STR_ALIGNED_OFFSET_AT : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    // Note: VecAlignedOffsetAt doesn't take alignment parameter
                    size_t offset = VecAlignedOffsetAt(vec, index);
    
            case VEC_STR_DELETE_LAST : {
                if (VecLen(vec) > 0) {
                    VecDeleteLast(vec);
                }
    
            case VEC_STR_DELETE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDeleteFast(vec, index);
            case VEC_STR_DELETE_FAST : {
                if (VecLen(vec) > 0 && *offset + 4 <= size) {
                    size_t index = extract_u32(data, offset, size) % VecLen(vec);
                    VecDeleteFast(vec, index);
                }
            // Foreach operations
            case VEC_STR_FOREACH : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeach(vec, str) {
    
            case VEC_STR_FOREACH_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachIdx(vec, str, idx) {
    
            case VEC_STR_FOREACH_PTR : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtr(vec, str_ptr) {
    
            case VEC_STR_FOREACH_PTR_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrIdx(vec, str_ptr, idx) {
    
            case VEC_STR_FOREACH_REVERSE : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachReverse(vec, str) {
    
            case VEC_STR_FOREACH_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachReverseIdx(vec, str, idx) {
    
            case VEC_STR_FOREACH_PTR_REVERSE : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrReverse(vec, str_ptr) {
    
            case VEC_STR_FOREACH_PTR_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    size_t total_len = 0;
                    VecForeachPtrReverseIdx(vec, str_ptr, idx) {
    
            case VEC_STR_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_STR_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_STR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_STR_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_STR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_STR_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_STR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_STR_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        size_t total_len = 0;
    
            case VEC_INT_POP_BACK : {
                if (VecLen(vec) > 0) {
                    i32 popped;
                    VecPopBack(vec, &popped);
    
            case VEC_INT_POP_FRONT : {
                if (VecLen(vec) > 0) {
                    i32 popped;
                    VecPopFront(vec, &popped);
                i32      value = (i32)extract_u32(data, offset, size);
    
                if (idx <= VecLen(vec)) {
                    VecInsert(vec, value, idx);
                }
            case VEC_INT_REMOVE : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    i32 removed;
                    VecRemove(vec, &removed, idx);
            case VEC_INT_DELETE : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    VecDelete(vec, idx);
                }
            case VEC_INT_AT : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    volatile i32 value = VecAt(vec, idx);
                    (void)value; // Prevent optimization
    
            case VEC_INT_LEN : {
                volatile uint64_t len = VecLen(vec);
                (void)len;
                break;
    
            case VEC_INT_FIRST : {
                if (VecLen(vec) > 0) {
                    volatile i32 first = VecFirst(vec);
                    (void)first;
    
            case VEC_INT_LAST : {
                if (VecLen(vec) > 0) {
                    volatile i32 last = VecLast(vec);
                    (void)last;
                uint16_t idx2 = extract_u16(data, offset, size);
    
                uint64_t len = VecLen(vec);
                if (len > 1 && idx1 < len && idx2 < len) {
                    VecSwapItems(vec, idx1, idx2);
                count          = count % 16;
    
                if (idx <= VecLen(vec) && count > 0) {
                    i32 values[16];
                    for (uint8_t i = 0; i < count && *offset + 4 <= size; i++) {
                count          = count % 16;
    
                uint64_t len = VecLen(vec);
                if (len > 0 && start < len && count > 0 && start + count <= len) {
                    i32 removed_items[16];
                count          = count % 16;
    
                uint64_t len = VecLen(vec);
                if (len > 0 && start < len && count > 0 && start + count <= len) {
                    VecDeleteRange(vec, start, count);
                i32      value = (i32)extract_u32(data, offset, size);
    
                if (idx <= VecLen(vec)) {
                    VecInsertFast(vec, value, idx);
                }
            case VEC_INT_REMOVE_FAST : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    i32 removed;
                    VecRemoveFast(vec, &removed, idx);
                count          = count % 16;
    
                uint64_t len = VecLen(vec);
                if (len > 0 && start < len && count > 0 && start + count <= len) {
                    i32 removed_items[16];
                count          = count % 16;
    
                uint64_t len = VecLen(vec);
                if (len > 0 && start < len && count > 0 && start + count <= len) {
                    VecDeleteRangeFast(vec, start, count);
            case VEC_INT_PTR_AT : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    volatile i32 *ptr = VecPtrAt(vec, idx);
                    volatile i32  val = *ptr;
                count          = count % 16;
    
                if (idx <= VecLen(vec) && count > 0) {
                    i32 values[16];
                    for (uint8_t i = 0; i < count && *offset + 4 <= size; i++) {
            case VEC_INT_ALIGNED_OFFSET_AT : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx <= VecLen(vec)) {
                    volatile uint64_t offset_val = VecAlignedOffsetAt(vec, idx);
                    (void)offset_val;
    
            case VEC_INT_DELETE_LAST : {
                if (VecLen(vec) > 0) {
                    VecDeleteLast(vec);
                }
            case VEC_INT_DELETE_FAST : {
                uint16_t idx = extract_u16(data, offset, size);
                if (idx < VecLen(vec)) {
                    VecDeleteFast(vec, idx);
                }
            // Foreach operations
            case VEC_INT_FOREACH : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeach(vec, item) {
    
            case VEC_INT_FOREACH_IDX : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachIdx(vec, item, idx) {
    
            case VEC_INT_FOREACH_PTR : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachPtr(vec, item_ptr) {
    
            case VEC_INT_FOREACH_PTR_IDX : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachPtrIdx(vec, item_ptr, idx) {
    
            case VEC_INT_FOREACH_REVERSE : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachReverse(vec, item) {
    
            case VEC_INT_FOREACH_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachReverseIdx(vec, item, idx) {
    
            case VEC_INT_FOREACH_PTR_REVERSE : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachPtrReverse(vec, item_ptr) {
    
            case VEC_INT_FOREACH_PTR_REVERSE_IDX : {
                if (VecLen(vec) > 0) {
                    int sum = 0;
                    VecForeachPtrReverseIdx(vec, item_ptr, idx) {
    
            case VEC_INT_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_INT_FOREACH_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        int sum = 0;
    
            case VEC_INT_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_INT_FOREACH_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        int sum = 0;
    
            case VEC_INT_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_INT_FOREACH_PTR_IN_RANGE : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        int sum = 0;
    
            case VEC_INT_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
            case VEC_INT_FOREACH_PTR_IN_RANGE_IDX : {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                if (VecLen(vec) > 0 && *offset + 8 <= size) {
                    size_t start = extract_u32(data, offset, size) % VecLen(vec);
                    size_t end   = extract_u32(data, offset, size) % (VecLen(vec) + 1);
                    if (start < end) {
                        int sum = 0;
    bool compare_configs(const TestConfig *a, const TestConfig *b) {
        if (a->debug_mode != b->debug_mode || a->timeout != b->timeout || StrCmp(&a->log_level, &b->log_level) != 0 ||
            VecLen(&a->features) != VecLen(&b->features)) {
            return false;
        }
        }
    
        for (size i = 0; i < VecLen(&a->features); i++) {
            if (StrCmp(&VecAt(&a->features, i), &VecAt(&b->features, i)) != 0) {
                return false;
    
        // Compare arrays
        bool numbers_match = (VecLen(&original_numbers) == VecLen(&parsed_numbers));
        if (numbers_match) {
            for (size i = 0; i < VecLen(&original_numbers); i++) {
        bool numbers_match = (VecLen(&original_numbers) == VecLen(&parsed_numbers));
        if (numbers_match) {
            for (size i = 0; i < VecLen(&original_numbers); i++) {
                if (VecAt(&original_numbers, i) != VecAt(&parsed_numbers, i)) {
                    numbers_match = false;
        }
    
        bool strings_match = (VecLen(&original_strings) == VecLen(&parsed_strings));
        if (strings_match) {
            for (size i = 0; i < VecLen(&original_strings); i++) {
        bool strings_match = (VecLen(&original_strings) == VecLen(&parsed_strings));
        if (strings_match) {
            for (size i = 0; i < VecLen(&original_strings); i++) {
                if (VecAt(&original_strings, i).length != VecAt(&parsed_strings, i).length ||
                    (VecAt(&original_strings, i).length &&
                "[DEBUG] Numbers match: {} (orig {}, parsed {})\n",
                numbers_match ? "true" : "false",
                VecLen(&original_numbers),
                VecLen(&parsed_numbers)
            );
                numbers_match ? "true" : "false",
                VecLen(&original_numbers),
                VecLen(&parsed_numbers)
            );
            WriteFmtLn(
                "[DEBUG] Strings match: {} (orig {}, parsed {})\n",
                strings_match ? "true" : "false",
                VecLen(&original_strings),
                VecLen(&parsed_strings)
            );
                strings_match ? "true" : "false",
                VecLen(&original_strings),
                VecLen(&parsed_strings)
            );
            success = false;
        bool config_match = compare_configs(&original.config, &parsed.config);
    
        bool numbers_match = (VecLen(&original.numbers) == VecLen(&parsed.numbers));
        if (numbers_match) {
            for (size i = 0; i < VecLen(&original.numbers); i++) {
        bool numbers_match = (VecLen(&original.numbers) == VecLen(&parsed.numbers));
        if (numbers_match) {
            for (size i = 0; i < VecLen(&original.numbers); i++) {
                if (VecAt(&original.numbers, i) != VecAt(&parsed.numbers, i)) {
                    numbers_match = false;
        }
    
        bool flags_match = (VecLen(&original.flags) == VecLen(&parsed.flags));
        if (flags_match) {
            for (size i = 0; i < VecLen(&original.flags); i++) {
        bool flags_match = (VecLen(&original.flags) == VecLen(&parsed.flags));
        if (flags_match) {
            for (size i = 0; i < VecLen(&original.flags); i++) {
                if (VecAt(&original.flags, i) != VecAt(&parsed.flags, i)) {
                    flags_match = false;
    
        // Compare empty containers
        if (parsed_str.length == 0 && VecLen(&parsed_numbers) == 0 && VecLen(&parsed_strings) == 0 &&
            !found_empty_object) { // Empty object should not execute the content
            WriteFmtLn("[DEBUG] Empty containers round-trip test passed");
                "[DEBUG] String length: {}, numbers: {}, strings: {}, found_obj: {}\n",
                parsed_str.length,
                VecLen(&parsed_numbers),
                VecLen(&parsed_strings),
                found_empty_object ? "true" : "false"
                parsed_str.length,
                VecLen(&parsed_numbers),
                VecLen(&parsed_strings),
                found_empty_object ? "true" : "false"
            );
        });
    
        if (VecLen(&items) == 0) {
            WriteFmtLn("[DEBUG] Empty array test passed - no items added");
        } else {
            WriteFmtLn("[DEBUG] Empty array test passed - no items added");
        } else {
            WriteFmtLn("[DEBUG] Empty array test FAILED - {} items found", VecLen(&items));
            success = false;
        }
        });
    
        if (VecLen(&data) == 0) {
            WriteFmtLn("[DEBUG] Empty array with whitespace test passed");
        } else {
        });
    
        if (obj.x_value == 1 && VecLen(&obj.filled_items) == 2 && VecAt(&obj.filled_items, 0) == 1 &&
            VecAt(&obj.filled_items, 1) == 2) {
            WriteFmt(
                "[DEBUG] Mixed empty and filled test passed - x: {}, items: {}\n",
                obj.x_value,
                VecLen(&obj.filled_items)
            );
        } else {
                "[DEBUG] Mixed empty and filled test FAILED - x: {}, items: {}\n",
                obj.x_value,
                VecLen(&obj.filled_items)
            );
            if (VecLen(&obj.filled_items) > 0) {
                VecLen(&obj.filled_items)
            );
            if (VecLen(&obj.filled_items) > 0) {
                WriteFmt("[DEBUG] First item: {}\n", VecAt(&obj.filled_items, 0));
            }
    // Test VecSize and VecLen functions
    bool test_vec_size_len(void) {
        WriteFmt("Testing VecSize and VecLen\n");
    
        // Create a vector of integers
        // Check initial size and length
        size vec_size = VecSize(&vec);
        size vec_len  = VecLen(&vec);
        bool result   = (vec_size == 0);
        result        = result && (vec_len == 0);
        // Check size and length after adding elements
        vec_size            = VecSize(&vec);
        vec_len             = VecLen(&vec);
        size aligned_offset = VecAlignedOffsetAt(&vec, vec.length);
        result              = result && (vec_size == aligned_offset);
        // Check size and length with alignment
        size aligned_vec_size  = VecSize(&aligned_vec);
        size aligned_vec_len   = VecLen(&aligned_vec);
        size aligned_offset_at = VecAlignedOffsetAt(&aligned_vec, aligned_vec.length);
        result                 = result && (aligned_vec_size == aligned_offset_at);
Last updated on