API: Cutting my losses and having singular types and files for the 4

types { char, int, float, string } and can come back later to make it
one type to call.

GITIGNORE: Added tests and Makefile to cleanup fuzzyfinder but dont need
them pushed either as I have enough testing done.
This commit is contained in:
2026-10-14 09:48:58 -04:00
parent b89579a5e7
commit 813390b6ac
18 changed files with 2322 additions and 213 deletions
-6
View File
@@ -1,6 +0,0 @@
#ifndef LIBVEC_H
#define LIBVEC_H
// Add code here
#endif
+117
View File
@@ -0,0 +1,117 @@
#ifndef CHAR_H
#define CHAR_H
#include <libvec/utils.h>
// Will add DOCS later
typedef struct
{
char* _internal_arr;
size_t _internal_size;
size_t _internal_capacity;
size_t _internal_max_size;
} _VecCharInternal;
__attribute__((overloadable)) size_t
__null_check(const _VecCharInternal* ptr, err_t* status);
__attribute__((overloadable)) size_t
__null_check(const char* ptr, err_t* status);
size_t
__origin_override(err_t* status, char* str);
void
_vec_char_print_vec(const _VecCharInternal* ptr, err_t* err);
_VecCharInternal
_vec_char_cpy(const char* src, const size_t src_size, err_t* err);
void
_vec_char_push_back(_VecCharInternal* ptr, const char val, err_t* err);
void
_vec_char_pop_back(_VecCharInternal* ptr, err_t* err);
void
_vec_char_reserve(_VecCharInternal* ptr, const size_t capacity, err_t* err);
void
_vec_char_shrink_to_fit(_VecCharInternal* ptr, err_t* err);
void
_vec_char_swap(_VecCharInternal* ptr_a, _VecCharInternal* ptr_b, err_t* err);
const char*
_vec_char_data(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_size(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_capacity(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_max_size(const _VecCharInternal* ptr, err_t* err);
void
_vec_char_delete(_VecCharInternal* ptr, err_t* err);
void
_vec_char_clear(_VecCharInternal* ptr, err_t* err);
char*
_vec_char_at(const _VecCharInternal* ptr, const size_t idx, err_t* err);
size_t
_vec_char_begin(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_end(const _VecCharInternal* ptr, err_t* err);
char
_vec_char_front(const _VecCharInternal* ptr, err_t* err);
char
_vec_char_back(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_empty(const _VecCharInternal* ptr, err_t* err);
__attribute__((overloadable)) void
_vec_char_erase(_VecCharInternal* ptr, const size_t iter, err_t* err);
__attribute__((overloadable)) void
_vec_char_erase(_VecCharInternal* ptr, const size_t iter_start,
const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_char_resize(_VecCharInternal* ptr, const size_t size, err_t* err);
__attribute__((overloadable)) void
_vec_char_resize(_VecCharInternal* ptr, const size_t size, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_assign(_VecCharInternal* ptr, const _VecCharInternal* iterator,
const size_t iter_start, const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_char_assign(_VecCharInternal* ptr, const size_t amount, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const size_t iter, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const size_t iter, const size_t amount,
const char val, err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const _VecCharInternal* iterator,
const size_t iter, const size_t iter_start,
const size_t iter_end, err_t* err);
#endif
+117
View File
@@ -0,0 +1,117 @@
#ifndef CHAR_H
#define CHAR_H
#include <libvec/utils.h>
// Will add DOCS later
typedef struct
{
char* _internal_arr;
size_t _internal_size;
size_t _internal_capacity;
size_t _internal_max_size;
} _VecCharInternal;
__attribute__((overloadable)) size_t
__null_check(const _VecCharInternal* ptr, err_t* status);
__attribute__((overloadable)) size_t
__null_check(const char* ptr, err_t* status);
size_t
__origin_override(err_t* status, char* str);
void
_vec_char_print_vec(const _VecCharInternal* ptr, err_t* err);
_VecCharInternal
_vec_char_cpy(const char* src, const size_t src_size, err_t* err);
void
_vec_char_push_back(_VecCharInternal* ptr, const char val, err_t* err);
void
_vec_char_pop_back(_VecCharInternal* ptr, err_t* err);
void
_vec_char_reserve(_VecCharInternal* ptr, const size_t capacity, err_t* err);
void
_vec_char_shrink_to_fit(_VecCharInternal* ptr, err_t* err);
void
_vec_char_swap(_VecCharInternal* ptr_a, _VecCharInternal* ptr_b, err_t* err);
const char*
_vec_char_data(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_size(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_capacity(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_max_size(const _VecCharInternal* ptr, err_t* err);
void
_vec_char_delete(_VecCharInternal* ptr, err_t* err);
void
_vec_char_clear(_VecCharInternal* ptr, err_t* err);
char*
_vec_char_at(const _VecCharInternal* ptr, const size_t idx, err_t* err);
size_t
_vec_char_begin(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_end(const _VecCharInternal* ptr, err_t* err);
char
_vec_char_front(const _VecCharInternal* ptr, err_t* err);
char
_vec_char_back(const _VecCharInternal* ptr, err_t* err);
size_t
_vec_char_empty(const _VecCharInternal* ptr, err_t* err);
__attribute__((overloadable)) void
_vec_char_erase(_VecCharInternal* ptr, const size_t iter, err_t* err);
__attribute__((overloadable)) void
_vec_char_erase(_VecCharInternal* ptr, const size_t iter_start,
const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_char_resize(_VecCharInternal* ptr, const size_t size, err_t* err);
__attribute__((overloadable)) void
_vec_char_resize(_VecCharInternal* ptr, const size_t size, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_assign(_VecCharInternal* ptr, const _VecCharInternal* iterator,
const size_t iter_start, const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_char_assign(_VecCharInternal* ptr, const size_t amount, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const size_t iter, const char val,
err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const size_t iter, const size_t amount,
const char val, err_t* err);
__attribute__((overloadable)) void
_vec_char_insert(_VecCharInternal* ptr, const _VecCharInternal* iterator,
const size_t iter, const size_t iter_start,
const size_t iter_end, err_t* err);
#endif
+117
View File
@@ -0,0 +1,117 @@
#ifndef INT_H
#define INT_H
#include <libvec/utils.h>
// Will add DOCS later
typedef struct
{
int* _internal_arr;
size_t _internal_size;
size_t _internal_capacity;
size_t _internal_max_size;
} _VecIntInternal;
__attribute__((overloadable)) size_t
__null_check(const _VecIntInternal* ptr, err_t* status);
__attribute__((overloadable)) size_t
__null_check(const int* ptr, err_t* status);
size_t
__origin_override(err_t* status, char* str);
void
_vec_int_print_vec(const _VecIntInternal* ptr, err_t* err);
_VecIntInternal
_vec_int_cpy(const int* src, const size_t src_size, err_t* err);
void
_vec_int_push_back(_VecIntInternal* ptr, const int val, err_t* err);
void
_vec_int_pop_back(_VecIntInternal* ptr, err_t* err);
void
_vec_int_reserve(_VecIntInternal* ptr, const size_t capacity, err_t* err);
void
_vec_int_shrink_to_fit(_VecIntInternal* ptr, err_t* err);
void
_vec_int_swap(_VecIntInternal* ptr_a, _VecIntInternal* ptr_b, err_t* err);
const int*
_vec_int_data(const _VecIntInternal* ptr, err_t* err);
size_t
_vec_int_size(const _VecIntInternal* ptr, err_t* err);
size_t
_vec_int_capacity(const _VecIntInternal* ptr, err_t* err);
size_t
_vec_int_max_size(const _VecIntInternal* ptr, err_t* err);
void
_vec_int_delete(_VecIntInternal* ptr, err_t* err);
void
_vec_int_clear(_VecIntInternal* ptr, err_t* err);
int*
_vec_int_at(const _VecIntInternal* ptr, const size_t idx, err_t* err);
size_t
_vec_int_begin(const _VecIntInternal* ptr, err_t* err);
size_t
_vec_int_end(const _VecIntInternal* ptr, err_t* err);
int
_vec_int_front(const _VecIntInternal* ptr, err_t* err);
int
_vec_int_back(const _VecIntInternal* ptr, err_t* err);
size_t
_vec_int_empty(const _VecIntInternal* ptr, err_t* err);
__attribute__((overloadable)) void
_vec_int_erase(_VecIntInternal* ptr, const size_t iter, err_t* err);
__attribute__((overloadable)) void
_vec_int_erase(_VecIntInternal* ptr, const size_t iter_start,
const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_int_resize(_VecIntInternal* ptr, const size_t size, err_t* err);
__attribute__((overloadable)) void
_vec_int_resize(_VecIntInternal* ptr, const size_t size, const int val,
err_t* err);
__attribute__((overloadable)) void
_vec_int_assign(_VecIntInternal* ptr, const _VecIntInternal* iterator,
const size_t iter_start, const size_t iter_end, err_t* err);
__attribute__((overloadable)) void
_vec_int_assign(_VecIntInternal* ptr, const size_t amount, const int val,
err_t* err);
__attribute__((overloadable)) void
_vec_int_insert(_VecIntInternal* ptr, const size_t iter, const int val,
err_t* err);
__attribute__((overloadable)) void
_vec_int_insert(_VecIntInternal* ptr, const size_t iter, const size_t amount,
const int val, err_t* err);
__attribute__((overloadable)) void
_vec_int_insert(_VecIntInternal* ptr, const _VecIntInternal* iterator,
const size_t iter, const size_t iter_start,
const size_t iter_end, err_t* err);
#endif
+67
View File
@@ -0,0 +1,67 @@
#ifndef UTILS_H
#define UTILS_H
#include <stddef.h>
#include <stdint.h>
#define CAPACITY 1024
#define VEC_FAULT_BITS 32
static const size_t VEC_MAX = SIZE_MAX / sizeof(int);
#define ERROR_LIST(X) \
X(SUCCESS, 0, "No Errors Found") \
X(ERR_ALLOC_FAIL, (1u << 0), "Alloc :- Failed to allocate") \
X(ERR_VEC_NULL, (1u << 1), "Vector :- Given vector is null") \
X(ERR_BUF_NULL, (1u << 2), "Buffer :- NULL") \
X(ERR_SIZE_ZERO, (1u << 3), \
"Size :- Size is or is less than 0 or invalid") \
X(ERR_OUT_OF_BOUNDS, (1u << 4), "Bounds:- Value is out of bounds") \
X(ERR_DOUBLE_BUF, (1u << 5), \
"Buffer :- Both buffers are copies of each other") \
X(ERR_SIZE_OVERFLOW, (1u << 6), \
"Max :- Vector Max value is overloaded") \
X(ERR_ORIGIN_UNALTERABLE, (1u << 7), \
"Origin :- Origin is non-null and cannot be overridden") \
X(ERR_STR_NULL, (1u << 8), "String :- String is null value") \
X(ERR_ERR_T_NULL, (1u << 9), "ERR_T :- Passed error is null")
typedef enum
{
#define X(name, val, desc) name = (val),
ERROR_LIST(X)
#undef X
} ERROR_CODES;
/* NOTE
* Value is the return value for functions like _vec_char_capacity
* Err is the unsigned bit range for all the errors tracked
* origin is a string for where the bug started and IS CHANGED ONLY WHEN NULL
* */
typedef struct
{
unsigned int flags;
char* origin; // Where the main bug started
} err_t;
#define ERR_T_INIT { .flags = 0, .origin = NULL }
#define VEC_INIT \
{ ._internal_arr = NULL, \
._internal_size = 0, \
._internal_capacity = 0, \
._internal_max_size = VEC_MAX }
const char*
vec_get_error_desc(ERROR_CODES err);
void
vec_print_errs(const err_t err);
void
print_bits(unsigned int num);
#define LOG(msg) printf("LOG: %s\n", msg) /**< Print log message*/
#define DEBUG(msg) printf("DEBUG: %s\n", msg) /**< Print debug message*/
#define find_len(arr) sizeof(arr) / sizeof(arr[0])
#endif