ValidateVec
Description
Validate whether a given Vec object is valid. Not foolproof but will work most of the time. Aborts if provided Vec is not valid.
Parameters
| Name | Direction | Description |
|---|---|---|
i |
in | Pointer to Vec object to validate. |
Success
Continue execution, meaning given Vec object is most probably a valid Vec.
Failure
abort
Usage example (Cross-references)
Usage examples (Cross-references)
- In
Graph.c:360:
u64 neighbor_i;
ValidateVec(&slot->out_neighbors);
ValidateVec(&slot->in_neighbors);- In
Graph.c:361:
ValidateVec(&slot->out_neighbors);
ValidateVec(&slot->in_neighbors);
if (graph_slot_is_occupied(slot)) {- In
Vec.c:18:
static inline size vec_aligned_size(GenericVec *v, size item_size) {
ValidateVec(v);
// Stack-init vecs (no allocator) keep element stride at
// `sizeof(T)`: their backing buffer is a `_Alignas(T) char[]`,
- In
Vec.c:29:
static inline size vec_aligned_offset_at(GenericVec *v, size idx, size item_size) {
ValidateVec(v);
return idx * vec_aligned_size(v, item_size);
}- In
Vec.c:34:
static inline u8 *vec_ptr_at(GenericVec *v, size idx, size item_size) {
ValidateVec(v);
return (u8 *)v->data + vec_aligned_offset_at(v, idx, item_size);- In
Vec.c:40:
static inline const u8 *vec_const_ptr_at(const GenericVec *v, size idx, size item_size) {
ValidateVec(v);
return (const u8 *)v->data + vec_aligned_offset_at((GenericVec *)v, idx, item_size);- In
Vec.c:48:
size aligned_size;
ValidateVec(vec);
// Stack-init vecs have no allocator and own no heap storage:
- In
Vec.c:82:
size aligned_size;
ValidateVec(vec);
aligned_size = vec_aligned_size(vec, item_size);- In
Vec.c:101:
size aligned_size;
ValidateVec(vec);
aligned_size = vec_aligned_size(vec, item_size);- In
Vec.c:128:
bool reserve_pow2_vec(GenericVec *vec, size item_size, size n) {
ValidateVec(vec);
if (n == 0) {- In
Vec.c:150:
size aligned_size;
ValidateVec(vec);
// Same rationale as `deinit_vec`: a stack-init vec has no
- In
Vec.c:186:
bool clone_vec(GenericVec *dst, const GenericVec *src, size item_size) {
ValidateVec(dst);
ValidateVec(src);- In
Vec.c:187:
bool clone_vec(GenericVec *dst, const GenericVec *src, size item_size) {
ValidateVec(dst);
ValidateVec(src);
if (src->length == 0) {- In
Vec.c:215:
}
ValidateVec(vec);
if (idx > vec->length) {- In
Vec.c:282:
}
ValidateVec(vec);
if (idx > vec->length) {- In
Vec.c:349:
void remove_range_vec(GenericVec *vec, void *removed_data, size item_size, size start, size count) {
ValidateVec(vec);
// `start + count` can wrap if both are huge -- a wrapped sum
- In
Vec.c:394:
void fast_remove_range_vec(GenericVec *vec, void *removed_data, size item_size, size start, size count) {
ValidateVec(vec);
// `start + count` can wrap if both are huge -- a wrapped sum
- In
Vec.c:448:
void vec_sort(GenericVec *vec, size item_size, GenericCompare comp) {
ValidateVec(vec);
if (vec_aligned_size(vec, item_size) != item_size) {- In
Vec.c:462:
void swap_vec(GenericVec *vec, size item_size, size idx1, size idx2) {
ValidateVec(vec);
if (idx1 >= vec->length || idx2 >= vec->length) {- In
Vec.c:486:
void reverse_vec(GenericVec *vec, size item_size) {
ValidateVec(vec);
size i = vec->length / 2;- In
Vec.c:495:
size find_idx_vec(GenericVec *vec, const void *item_data, size item_size, GenericCompare comp) {
ValidateVec(vec);
if (!item_data || !comp) {- In
Vec.c:511:
bool resize_vec(GenericVec *vec, size item_size, size new_size) {
ValidateVec(vec);
if (new_size <= vec->capacity) {- In
Str.c:1149:
void ValidateStr(const Str *s) {
return ValidateVec(s);
}- In
Str.c:1153:
void ValidateStrs(const Strs *vs) {
ValidateVec(vs);
VecForeachPtr(vs, sp) {
ValidateStr(sp);- In
Str.Insert.c:272:
// Validate both vectors
ValidateVec(&s1);
ValidateVec(&s2);- In
Str.Insert.c:273:
// Validate both vectors
ValidateVec(&s1);
ValidateVec(&s2);
// Check that the strings were merged correctly
- In
Vec.Type.c:56:
// Test ValidateVec macro
bool test_vec_validate(void) {
WriteFmt("Testing ValidateVec macro\n");
DefaultAllocator alloc = DefaultAllocatorInit();- In
Vec.Type.c:65:
// This should not abort
ValidateVec(&vec);
// Clean up
- In
StrIter.h:41:
/// TAGS: StrIter, Validate, API
///
#define ValidateStrIters(siv) ValidateVec(siv)
// ---------------------------------------------------------------------------
- In
Foreach.h:31:
#define VecForeachIdx(v, var, idx) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 idx = 0, UNPL(d) = 1; UNPL(d); UNPL(d)--) \
for (VEC_DATATYPE(UNPL(pv)) var = {0}; idx < UNPL(pv)->length && (var = VecAt(UNPL(pv), idx), 1); idx++)- In
Foreach.h:56:
#define VecForeachReverseIdx(v, var, idx) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 idx = UNPL(pv)->length; idx-- > 0 && idx < UNPL(pv)->length;) \
for (u8 UNPL(run_once) = 1; UNPL(run_once); UNPL(run_once) = 0) \- In
Foreach.h:83:
#define VecForeachPtrIdx(v, var, idx) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 idx = 0, UNPL(d) = 1; UNPL(d); UNPL(d)--) \
for (VEC_DATATYPE(UNPL(pv)) *var = NULL; idx < UNPL(pv)->length && (var = VecPtrAt(UNPL(pv), idx), 1); \- In
Foreach.h:109:
#define VecForeachPtrReverseIdx(v, var, idx) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 idx = UNPL(pv)->length; idx-- > 0 && idx < UNPL(pv)->length;) \
for (u8 UNPL(run_once) = 1; UNPL(run_once); UNPL(run_once) = 0) \- In
Foreach.h:177:
#define VecForeachInRangeIdx(v, var, idx, start, end) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 UNPL(s) = (start), UNPL(e) = (end), idx = UNPL(s), UNPL(d) = 1; \
UNPL(s) <= idx && idx < UNPL(e) && idx < UNPL(pv)->length && UNPL(s) <= UNPL(e); \- In
Foreach.h:216:
#define VecForeachPtrInRangeIdx(v, var, idx, start, end) \
for (TYPE_OF(v) UNPL(pv) = (v); UNPL(pv); UNPL(pv) = NULL) \
if ((ValidateVec(UNPL(pv)), 1) && UNPL(pv)->length > 0) \
for (u64 UNPL(s) = (start), UNPL(e) = (end), idx = UNPL(s), UNPL(d) = 1; \
idx >= UNPL(s) && idx < UNPL(e) && idx < UNPL(pv)->length && UNPL(s) <= UNPL(e); \- In
Insert.h:40:
///
#define VecInsertL(v, lval, idx) \
(ValidateVec(v), \
CHECK_TYPE_EQUIVALENCE(TYPE_OF(lval), VEC_DATATYPE(v)), \
vec_insert_one_l(GENERIC_VEC(v), &LVAL_AS(VEC_DATATYPE(v), lval), &(lval), sizeof(VEC_DATATYPE(v)), (idx), true))- In
Insert.h:64:
///
#define VecInsertR(v, rval, idx) \
(ValidateVec(v), \
CHECK_TYPE_CONVERTIBLE(VEC_DATATYPE(v), rval), \
vec_insert_one_r(GENERIC_VEC(v), &LVAL_AS(VEC_DATATYPE(v), rval), sizeof(VEC_DATATYPE(v)), (idx), true))- In
Insert.h:102:
///
#define VecInsertFastL(v, lval, idx) \
(ValidateVec(v), \
CHECK_TYPE_EQUIVALENCE(TYPE_OF(lval), VEC_DATATYPE(v)), \
vec_insert_one_l( \- In
Insert.h:129:
///
#define VecInsertFastR(v, rval, idx) \
(ValidateVec(v), \
CHECK_TYPE_CONVERTIBLE(VEC_DATATYPE(v), rval), \
vec_insert_one_r(GENERIC_VEC(v), &LVAL_AS(VEC_DATATYPE(v), rval), sizeof(VEC_DATATYPE(v)), (idx), false))- In
Insert.h:170:
///
#define VecInsertRangeL(v, varr, idx, count) \
(ValidateVec(v), \
CHECK_TYPE_EQUIVALENCE(TYPE_OF(*(varr)), VEC_DATATYPE(v)), \
vec_insert_range_l(GENERIC_VEC(v), (void *)(varr), sizeof(VEC_DATATYPE(v)), (idx), (count), true))- In
Insert.h:193:
///
#define VecInsertRangeR(v, varr, idx, count) \
(ValidateVec(v), \
CHECK_TYPE_CONVERTIBLE(const VEC_DATATYPE(v) *, varr), \
vec_insert_range_r(GENERIC_VEC(v), (const void *)(varr), sizeof(VEC_DATATYPE(v)), (idx), (count), true))- In
Insert.h:225:
///
#define VecInsertRangeFastL(v, varr, idx, count) \
(ValidateVec(v), \
CHECK_TYPE_EQUIVALENCE(TYPE_OF(*(varr)), VEC_DATATYPE(v)), \
vec_insert_range_l(GENERIC_VEC(v), (void *)(varr), sizeof(VEC_DATATYPE(v)), (idx), (count), false))- In
Insert.h:239:
///
#define VecInsertRangeFastR(v, varr, idx, count) \
(ValidateVec(v), \
CHECK_TYPE_CONVERTIBLE(const VEC_DATATYPE(v) *, varr), \
vec_insert_range_r(GENERIC_VEC(v), (const void *)(varr), sizeof(VEC_DATATYPE(v)), (idx), (count), false))- In
Insert.h:401:
///
#define VecMergeL(v, v2) \
(ValidateVec(v), ValidateVec(v2), vec_merge_l(GENERIC_VEC(v), GENERIC_VEC(v2), sizeof(VEC_DATATYPE(v))))
///
- In
Insert.h:418:
///
#define VecMergeR(v, v2) \
(ValidateVec(v), ValidateVec(v2), vec_merge_r(GENERIC_VEC(v), GENERIC_VEC(v2), sizeof(VEC_DATATYPE(v))))
///
- In
Insert.h:525:
///
#define VecInitClone(vd, vs) \
(ValidateVec(vd), \
ValidateVec(vs), \
VecDeinit(vd), \- In
Insert.h:526:
#define VecInitClone(vd, vs) \
(ValidateVec(vd), \
ValidateVec(vs), \
VecDeinit(vd), \
*(vd) = (TYPE_OF(*(vd))) {.length = 0, \
Last updated on