VecLen

Table of Contents

VecLen

Description

Length of vector.

Parameters

NameDirectionDescription
vinVector to get length of

Usage example (Cross-references)

    // 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);
    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));
    }
    
    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_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;
    
    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_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;

Share :