StrForeachInRangeIdx
Description
Walk characters of str in the half-open range [start, end), binding chr to the character value at index idx. Both chr and idx are stamped by the macro. See VecForeachInRangeIdx for the full SUCCESS/FAILURE contract.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Foreach.c:279:
// Test StrForeachInRangeIdx macro
bool test_str_foreach_in_range_idx(void) {
WriteFmt("Testing StrForeachInRangeIdx\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Foreach.c:287:
// Build a new string by iterating through a range of characters with indices
Str result = StrInit(&alloc);
StrForeachInRangeIdx(&s, chr, idx, 6, 11) {
// Append the character and its index to the result string
StrAppendFmt(&result, "{c}{}", chr, idx);- In
Foreach.c:297:
// Test with empty range
Str empty_result = StrInit(&alloc);
StrForeachInRangeIdx(&s, chr, idx, 3, 3) {
// This block should not execute
StrPushBackR(&empty_result, chr);- In
Foreach.c:413:
// Make idx go out of bounds in StrForeachInRangeIdx by shrinking string during iteration
bool test_str_foreach_out_of_bounds_access(void) {
WriteFmt("Testing StrForeachInRangeIdx where idx goes out of bounds\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Foreach.c:422:
// Even if we shrink the string, the loop will continue until idx reaches the fixed end
size original_length = StrLen(&s); // Capture this as 12
StrForeachInRangeIdx(&s, chr, idx, 0, original_length) {
WriteFmt("Accessing idx {} (s.length={}): '{c}'\n", idx, StrLen(&s), chr);- In
Foreach.c:450:
// Make idx go out of bounds in StrForeachInRangeIdx by deleting characters
bool test_str_foreach_idx_out_of_bounds_access(void) {
WriteFmt("Testing StrForeachInRangeIdx with character deletion where idx goes out of bounds\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Foreach.c:459:
// when we delete characters during iteration
size original_length = StrLen(&s); // Capture this as 11
StrForeachInRangeIdx(&s, chr, idx, 0, original_length) {
WriteFmt("Accessing idx {} (s.length={}): '{c}'\n", idx, StrLen(&s), chr);
Last updated on