ValidateVec

Table of Contents

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

NameDirectionDescription
iinPointer to Vec object to validate.

Success

Continue execution, meaning given Vec object is most probably a valid Vec.

Failure

abort

Usage example (Cross-references)

    
    void ValidateStr(const Str *s) {
    return ValidateVec(s);
    }
    
    void ValidateStrs(const Strs *vs) {
    ValidateVec(vs);
    VecForeachPtr(vs, sp) {
    ValidateStr(sp);
    
    static inline size vec_aligned_size(GenericVec *v, size item_size) {
    ValidateVec(v);
    
    if (!v->alignment) {
    
    static inline size vec_aligned_offset_at(GenericVec *v, size idx, size item_size) {
    ValidateVec(v);
    
    return idx * vec_aligned_size(v, item_size);
    
    static inline char *vec_ptr_at(GenericVec *v, size idx, size item_size) {
    ValidateVec(v);
    
    return v->data + vec_aligned_offset_at(v, idx, item_size);
    
    void deinit_vec(GenericVec *vec, size item_size) {
    ValidateVec(vec);
    
    if (vec->data) {
    
    void clear_vec(GenericVec *vec, size item_size) {
    ValidateVec(vec);
    
    if (vec->data) {
    // Reserve new space if n > capacity
    void reserve_vec(GenericVec *vec, size item_size, size n) {
    ValidateVec(vec);
    
    if (n > vec->capacity) {
    
    void reserve_pow2_vec(GenericVec *vec, size item_size, size n) {
    ValidateVec(vec);
    
    size n2 = 1;
    
    void reduce_space_vec(GenericVec *vec, size item_size) {
    ValidateVec(vec);
    
    if (vec->length == 0) {
    }
    
    ValidateVec(vec);
    
    if (idx > vec->length) {
    }
    
    ValidateVec(vec);
    
    if (idx > vec->length) {
    
    void remove_range_vec(GenericVec *vec, void *removed_data, size item_size, size start, size count) {
    ValidateVec(vec);
    
    if (start + count > vec->length) {
    
    void fast_remove_range_vec(GenericVec *vec, void *removed_data, size item_size, size start, size count) {
    ValidateVec(vec);
    
    if (start + count > vec->length) {
    
    void qsort_vec(GenericVec *vec, size item_size, GenericCompare comp) {
    ValidateVec(vec);
    
    if (vec_aligned_size(vec, item_size) != item_size) {
    
    void swap_vec(GenericVec *vec, size item_size, size idx1, size idx2) {
    ValidateVec(vec);
    
    if (idx1 >= vec->length || idx2 >= vec->length) {
    
    void reverse_vec(GenericVec *vec, size item_size) {
    ValidateVec(vec);
    
    size i = vec->length / 2;
    
    void resize_vec(GenericVec *vec, size item_size, size new_size) {
    ValidateVec(vec);
    
    if (new_size <= vec->capacity) {
    // Test ValidateVec macro
    bool test_vec_validate(void) {
    WriteFmt("Testing ValidateVec macro\n");
    
    // Create a valid vector
    
    // This should not abort
    ValidateVec(&vec);
    
    // Clean up
    
    // Validate both vectors
    ValidateVec(&s1);
    ValidateVec(&s2);
    // Validate both vectors
    ValidateVec(&s1);
    ValidateVec(&s2);
    
    // Check that the strings were merged correctly
    /// FAILURE : `abort`
    ///
    #define ValidateStrIters(siv) ValidateVec(siv);
    
    ///
    #define VecInsertL(v, lval, idx)                                                                                       \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    VEC_DATATYPE(v) *__ptr__val_##__LINE__ = &(lval);                                                              \
    VEC_DATATYPE(v) __tmp__val_##__LINE__  = (lval);                                                               \
    #define VecInsertR(v, rval, idx)                                                                                       \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    VEC_DATATYPE(v) __tmp__val_##__LINE__ = (rval);                                                                \
    insert_range_into_vec(GENERIC_VEC(v), (char *)&__tmp__val_##__LINE__, sizeof(VEC_DATATYPE(v)), (idx), 1);      \
    #define VecInsertFastL(v, val, idx)                                                                                    \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    VEC_DATATYPE(v) *__ptr_val_##__LINE__ = &(val);                                                                \
    {                                                                                                              \
    #define VecInsertFastR(v, val, idx)                                                                                    \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    VEC_DATATYPE(v) *__ptr_val_##__LINE__ = &(val);                                                                \
    {                                                                                                              \
    #define VecInsertRangeL(v, varr, idx, count)                                                                           \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    {                                                                                                              \
    if (varr == NULL) {                                                                                        \
    #define VecInsertRangeR(v, varr, idx, count)                                                                           \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    {                                                                                                              \
    if (varr == NULL) {                                                                                        \
    #define VecInsertRangeFastL(v, varr, idx, count)                                                                       \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    {                                                                                                              \
    if (varr == NULL) {                                                                                        \
    #define VecInsertRangeFastR(v, varr, idx, count)                                                                       \
    do {                                                                                                               \
    ValidateVec(v);                                                                                                \
    {                                                                                                              \
    if (varr == NULL) {                                                                                        \
    #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++)
    #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)                                        \
    #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); \
    #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)                                        \
    #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);                      \
    #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);                      \

Share :