VecRemoveRange
Description
Remove count elements starting at start and optionally move them out to the provided buffer. Order of remaining trailing elements is preserved.
Parameters
| Name | Direction | Description |
|---|---|---|
v |
in,out | Vector handle. |
ptr |
out | Optional destination buffer of at least count aligned slots. Pass NULL to discard the removed elements (the configured copy_deinit is invoked instead). |
start |
in | First removed index. |
count |
in | Number of elements to remove. |
Success
Returns to the caller. The vector length shrinks by count; elements that previously sat at indices >= start + count have shifted left by count. When ptr is non-NULL, the removed values have been bit-copied into *ptr in order (copy_deinit is not invoked - ownership transfers). When ptr is NULL and copy_deinit is configured, the handler is invoked on each removed element.
Failure
Function cannot fail. start + count exceeding length is a caller bug and aborts via LOG_FATAL.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
VecCharPtr.c:248:
size_t index = extract_u32(data, offset, data_size) % VecLen(vec);
size_t count = extract_u32(data, offset, data_size) % (VecLen(vec) - index + 1);
VecRemoveRange(vec, (char **)NULL, index, count);
}
break;- In
VecStr.c:257:
size_t index = extract_u32(data, offset, data_size) % VecLen(vec);
size_t count = extract_u32(data, offset, data_size) % (VecLen(vec) - index + 1);
VecRemoveRange(vec, (Str *)NULL, index, count);
}
break;- In
VecInt.c:194:
if (len > 0 && start < len && count > 0 && start + count <= len) {
i32 removed_items[16];
VecRemoveRange(vec, removed_items, start, count);
}
break;- In
Remove.h:225:
/// TAGS: Vec, Delete, Range
///
#define VecDeleteRange(v, start, count) VecRemoveRange((v), (VEC_DATATYPE(v) *)NULL, (start), (count))
///
- In
Remove.h:51:
/// TAGS: Str, Remove, Range
///
#define StrRemoveRange(str, rd, start, count) VecRemoveRange((str), (rd), (start), (count))
///
Last updated on