diff options
| author | Mosder <xmosder12@gmail.com> | 2026-08-17 11:57:36 +0200 |
|---|---|---|
| committer | Mosder <xmosder12@gmail.com> | 2026-08-17 11:57:36 +0200 |
| commit | db24efc8c918b323145825735b51f574c6855f00 (patch) | |
| tree | 58a04a38281caff323ff45695ce9a034e7daa9fc /include | |
| parent | 674fb098ddf9daa173c4e579c84275e943445e5a (diff) | |
feat: added ability to redefine ARR_INIT_CAP and MAX_ALLOC_ATTEMPTS
Diffstat (limited to 'include')
| -rw-r--r-- | include/moslib/ds/array.h | 71 | ||||
| -rw-r--r-- | include/moslib/mem/alloc.h | 24 | ||||
| -rw-r--r-- | include/moslib/tester.h | 4 |
3 files changed, 51 insertions, 48 deletions
diff --git a/include/moslib/ds/array.h b/include/moslib/ds/array.h index 65b729f..92dacbd 100644 --- a/include/moslib/ds/array.h +++ b/include/moslib/ds/array.h @@ -150,9 +150,13 @@ #ifndef MOSLIB_DS_ARRAY_H #define MOSLIB_DS_ARRAY_H -#ifndef MOSLIB_FORCE_PREFIXES +// Initial capacity to use in the array +#ifndef MOS_ARR_INIT_CAP +#define MOS_ARR_INIT_CAP 16 +#endif // MOS_ARR_INIT_CAP + +#ifndef MOS_FORCE_PREFIXES -#define ARR_INIT_CAP MOS_ARR_INIT_CAP #define arr_get mos_arr_get #define arr_first mos_arr_first #define arr_last mos_arr_last @@ -178,10 +182,7 @@ #define arr_set_cap mos_arr_set_cap #define arr_free mos_arr_free -#endif // MOSLIB_FORCE_PREFIXES - -// Initial capacity to use in the array -#define MOS_ARR_INIT_CAP 16 +#endif // MOS_FORCE_PREFIXES // Get a pointer to an item at specific index in array // @@ -231,10 +232,10 @@ // Returns: // index of the appended item #define mos_arr_push mos_arr_append -#define mos_arr_append(arr, ...) ( \ - mos_arr_append_fn(&(arr), sizeof(*(arr))), \ - (arr)[mos_arr_len(arr) - 1] = __VA_ARGS__, \ - mos_arr_len(arr) - 1 \ +#define mos_arr_append(arr, ...) ( \ + mos_arr_append_fn(&(arr), sizeof(*(arr)), MOS_ARR_INIT_CAP), \ + (arr)[mos_arr_len(arr) - 1] = __VA_ARGS__, \ + mos_arr_len(arr) - 1 \ ) // Insert a given item at the specific position in the array @@ -254,14 +255,14 @@ // // Returns: // index of the inserted item -#define mos_arr_insert(arr, i, ...) ( \ - (size_t)(i) >= mos_arr_len(arr) ? ( \ - mos_arr_append(arr, __VA_ARGS__) \ - ) : ( \ - mos_arr_insert_fn(&(arr), i, sizeof(*(arr))), \ - (arr)[(size_t)(i)] = __VA_ARGS__, \ - (size_t)(i) \ - ) \ +#define mos_arr_insert(arr, i, ...) ( \ + (size_t)(i) >= mos_arr_len(arr) ? ( \ + mos_arr_append(arr, __VA_ARGS__) \ + ) : ( \ + mos_arr_insert_fn(&(arr), i, sizeof(*(arr)), MOS_ARR_INIT_CAP), \ + (arr)[(size_t)(i)] = __VA_ARGS__, \ + (size_t)(i) \ + ) \ ) // Put a given item at the specific position in the array @@ -282,10 +283,10 @@ // // Returns: // index of the put item -#define mos_arr_put(arr, i, ...) ( \ - mos_arr_put_fn(&(arr), i, sizeof(*(arr))), \ - (arr)[(size_t)(i)] = __VA_ARGS__, \ - (size_t)(i) \ +#define mos_arr_put(arr, i, ...) ( \ + mos_arr_put_fn(&(arr), i, sizeof(*(arr)), MOS_ARR_INIT_CAP), \ + (arr)[(size_t)(i)] = __VA_ARGS__, \ + (size_t)(i) \ ) // clang-format on @@ -305,7 +306,7 @@ // Returns: // index of the first appended item #define mos_arr_push_n mos_arr_append_n -#define mos_arr_append_n(arr, items, n) mos_arr_append_n_fn(&(arr), items, n, sizeof(*(arr))) +#define mos_arr_append_n(arr, items, n) mos_arr_append_n_fn(&(arr), items, n, sizeof(*(arr)), MOS_ARR_INIT_CAP) // Insert n given items at the specific position in the array // Move everything after them to the right @@ -326,7 +327,7 @@ // // Returns: // index of the first inserted item -#define mos_arr_insert_n(arr, i, items, n) mos_arr_insert_n_fn(&(arr), i, items, n, sizeof(*(arr))) +#define mos_arr_insert_n(arr, i, items, n) mos_arr_insert_n_fn(&(arr), i, items, n, sizeof(*(arr)), MOS_ARR_INIT_CAP) // Put n given items at the specific position in the array // If index is within array bounds - it overwrites the items at given spots @@ -348,7 +349,7 @@ // // Returns: // index of the first put item -#define mos_arr_put_n(arr, i, items, n) mos_arr_put_n_fn(&(arr), i, items, n, sizeof(*(arr))) +#define mos_arr_put_n(arr, i, items, n) mos_arr_put_n_fn(&(arr), i, items, n, sizeof(*(arr)), MOS_ARR_INIT_CAP) // Concatenate two dynamic arrays of the same type // @@ -361,7 +362,7 @@ // // Returns: // index of the first new item in arr1 or (size_t)-1 if arr2 is NULL or has length 0 -#define mos_arr_concat(arr1, arr2) mos_arr_concat_fn(&(arr1), arr2, sizeof(*(arr1))) +#define mos_arr_concat(arr1, arr2) mos_arr_concat_fn(&(arr1), arr2, sizeof(*(arr1)), MOS_ARR_INIT_CAP) // Delete and retrieve the last item from the array // No bounds checking @@ -483,7 +484,7 @@ extern size_t mos_arr_len(void *arr); // // Returns: // count of the deleted items -#define mos_arr_set_len(arr, len) mos_arr_set_len_fn(&(arr), len, sizeof(*(arr))) +#define mos_arr_set_len(arr, len) mos_arr_set_len_fn(&(arr), len, sizeof(*(arr)), MOS_ARR_INIT_CAP) // Get the capacity of the array // @@ -524,18 +525,18 @@ typedef struct { #define mos_arr_p_diff(p1, p2) (((char *)(p1) - (char*)(p2)) / sizeof(*(p2))) // Function prototypes for macros -extern void mos_arr_append_fn(void *p_arr, size_t el_size); -extern void mos_arr_insert_fn(void *p_arr, size_t i, size_t el_size); -extern void mos_arr_put_fn(void *p_arr, size_t i, size_t el_size); -extern size_t mos_arr_append_n_fn(void *p_arr, void *items, size_t n, size_t el_size); -extern size_t mos_arr_insert_n_fn(void *p_arr, size_t i, void *items, size_t n, size_t el_size); -extern size_t mos_arr_put_n_fn(void *p_arr, size_t i, void *items, size_t n, size_t el_size); -extern size_t mos_arr_concat_fn(void *p_arr, void *arr2, size_t el_size); +extern void mos_arr_append_fn(void *p_arr, size_t el_size, size_t init_cap); +extern void mos_arr_insert_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap); +extern void mos_arr_put_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap); +extern size_t mos_arr_append_n_fn(void *p_arr, void *items, size_t n, size_t el_size, size_t init_cap); +extern size_t mos_arr_insert_n_fn(void *p_arr, size_t i, void *items, size_t n, size_t el_size, size_t init_cap); +extern size_t mos_arr_put_n_fn(void *p_arr, size_t i, void *items, size_t n, size_t el_size, size_t init_cap); +extern size_t mos_arr_concat_fn(void *p_arr, void *arr2, size_t el_size, size_t init_cap); extern size_t mos_arr_del_fn(void *arr, size_t i, size_t el_size); extern size_t mos_arr_del_n_fn(void *arr, size_t i, size_t n, size_t el_size); extern size_t mos_arr_del_front_fn(void *arr, size_t n, size_t el_size); extern size_t mos_arr_del_back_fn(void *arr, size_t n); -extern size_t mos_arr_set_len_fn(void *p_arr, size_t len, size_t el_size); +extern size_t mos_arr_set_len_fn(void *p_arr, size_t len, size_t el_size, size_t init_cap); extern size_t mos_arr_set_cap_fn(void *p_arr, size_t cap, size_t el_size); #endif // MOSLIB_DS_ARRAY_H diff --git a/include/moslib/mem/alloc.h b/include/moslib/mem/alloc.h index eb557e5..564c70f 100644 --- a/include/moslib/mem/alloc.h +++ b/include/moslib/mem/alloc.h @@ -6,17 +6,19 @@ #ifndef MOSLIB_MEM_ALLOC_H #define MOSLIB_MEM_ALLOC_H -#ifndef MOSLIB_FORCE_PREFIXES +// Attempt count for alloc functions +#ifndef MOS_MAX_ALLOC_ATTEMPTS +#define MOS_MAX_ALLOC_ATTEMPTS 3 +#endif // MOS_MAX_ALLOC_ATTEMPTS + +#ifndef MOS_FORCE_PREFIXES -#define MAX_ALLOC_ATTEMPTS MOS_MAX_ALLOC_ATTEMPTS #define safe_malloc mos_safe_malloc #define safe_realloc mos_safe_realloc -#endif // MOSLIB_FORCE_PREFIXES - -#define MOS_MAX_ALLOC_ATTEMPTS 3 +#endif // MOS_FORCE_PREFIXES -// Tries to malloc MOSLIB_MAX_ALLOC_ATTEMPTS times +// Tries to malloc MOS_MAX_ALLOC_ATTEMPTS times // If all attempts fail - exits with EXIT_FAILURE code // // Arguments: @@ -25,9 +27,9 @@ // // Returns: // pointer to the allocated memory -#define mos_safe_malloc(size) mos_safe_malloc_fn(size, __FILE__, __LINE__, __func__) +#define mos_safe_malloc(size) mos_safe_malloc_fn(size, MOS_MAX_ALLOC_ATTEMPTS, __FILE__, __LINE__, __func__) -// Tries to realloc MOSLIB_MAX_ALLOC_ATTEMPTS times +// Tries to realloc MOS_MAX_ALLOC_ATTEMPTS times // If all attempts fail - exits with EXIT_FAILURE code // // Arguments: @@ -39,10 +41,10 @@ // // Returns: // pointer to the reallocated memory -#define mos_safe_realloc(ptr, size) mos_safe_realloc_fn(ptr, size, __FILE__, __LINE__, __func__) +#define mos_safe_realloc(ptr, size) mos_safe_realloc_fn(ptr, size, MOS_MAX_ALLOC_ATTEMPTS, __FILE__, __LINE__, __func__) // Function prototypes for macros -extern void *mos_safe_malloc_fn(size_t size, const char *file, int line, const char *func); -extern void *mos_safe_realloc_fn(void *ptr, size_t size, const char *file, int line, const char *func); +extern void *mos_safe_malloc_fn(size_t size, size_t att, const char *file, int line, const char *func); +extern void *mos_safe_realloc_fn(void *ptr, size_t size, size_t att, const char *file, int line, const char *func); #endif // MOSLIB_MEM_ALLOC_H diff --git a/include/moslib/tester.h b/include/moslib/tester.h index ae41629..1d50473 100644 --- a/include/moslib/tester.h +++ b/include/moslib/tester.h @@ -83,7 +83,7 @@ #ifndef MOSLIB_TESTER_H #define MOSLIB_TESTER_H -#ifndef MOSLIB_FORCE_PREFIXES +#ifndef MOS_FORCE_PREFIXES #define Test MosTest #define Tester MosTester @@ -99,7 +99,7 @@ #define run_tests mos_run_tests #define free_tester mos_free_tester -#endif // MOSLIB_FORCE_PREFIXES +#endif // MOS_FORCE_PREFIXES typedef void MosTest; // this is just for nice indication that a function is a test typedef struct MosTester MosTester; |
