Add .clang-format

This commit is contained in:
Maciej Krzyżanowski 2025-02-17 01:20:26 +01:00
parent 143100fe82
commit 72df66b2b0
2 changed files with 178 additions and 152 deletions

6
.clang-format Normal file
View File

@ -0,0 +1,6 @@
---
BasedOnStyle: LLVM
IndentWidth: 4
BreakBeforeBraces: Allman
IncludeBlocks: Regroup
ColumnLimit: 80

58
main.c
View File

@ -16,14 +16,16 @@
_a < _b ? _a : _b; \ _a < _b ? _a : _b; \
}) })
typedef struct { typedef struct
{
void *elem_storage; void *elem_storage;
size_t elem_count; size_t elem_count;
size_t elem_size; size_t elem_size;
size_t elem_count_cap; size_t elem_count_cap;
} cvec; } cvec;
int cvec_new(cvec *dest, size_t elem_size) { int cvec_new(cvec *dest, size_t elem_size)
{
size_t init_count_cap = 1; size_t init_count_cap = 1;
cvec result = { cvec result = {
.elem_storage = malloc(init_count_cap * elem_size), .elem_storage = malloc(init_count_cap * elem_size),
@ -39,7 +41,8 @@ int cvec_new(cvec *dest, size_t elem_size) {
return 0; return 0;
} }
int cvec_extend(cvec *dest) { int cvec_extend(cvec *dest)
{
dest->elem_count_cap *= 2; dest->elem_count_cap *= 2;
dest->elem_storage = dest->elem_storage =
realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size); realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
@ -49,8 +52,10 @@ int cvec_extend(cvec *dest) {
return 0; return 0;
} }
int cvec_append(cvec *dest, void *elem) { int cvec_append(cvec *dest, void *elem)
if (dest->elem_count == dest->elem_count_cap) { {
if (dest->elem_count == dest->elem_count_cap)
{
if (cvec_extend(dest)) if (cvec_extend(dest))
return -1; return -1;
} }
@ -63,7 +68,8 @@ int cvec_append(cvec *dest, void *elem) {
return 0; return 0;
} }
int cvec_shrink(cvec *dest) { int cvec_shrink(cvec *dest)
{
dest->elem_count_cap /= 2; dest->elem_count_cap /= 2;
dest->elem_storage = dest->elem_storage =
realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size); realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
@ -73,10 +79,12 @@ int cvec_shrink(cvec *dest) {
return 0; return 0;
} }
int cvec_pop(cvec *dest) { int cvec_pop(cvec *dest)
{
dest->elem_count--; dest->elem_count--;
if (dest->elem_count < dest->elem_count_cap / 2) { if (dest->elem_count < dest->elem_count_cap / 2)
{
if (cvec_shrink(dest)) if (cvec_shrink(dest))
return -1; return -1;
} }
@ -85,20 +93,23 @@ int cvec_pop(cvec *dest) {
} }
void cvec_free(cvec vec); void cvec_free(cvec vec);
int cvec_erase(cvec *dest) { int cvec_erase(cvec *dest)
{
size_t elem_size = dest->elem_size; size_t elem_size = dest->elem_size;
cvec_free(*dest); cvec_free(*dest);
return cvec_new(dest, elem_size); return cvec_new(dest, elem_size);
} }
typedef enum { typedef enum
{
CVEC_PRINT_FLAG_NONE = 0, CVEC_PRINT_FLAG_NONE = 0,
CVEC_PRINT_FLAG_ELLIPSIS = 1, CVEC_PRINT_FLAG_ELLIPSIS = 1,
CVEC_PRINT_FLAG_MULTILINE = 2, CVEC_PRINT_FLAG_MULTILINE = 2,
} cvec_print_flag; } cvec_print_flag;
typedef void (*cvec_print_func)(void *elem); typedef void (*cvec_print_func)(void *elem);
void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags) { void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags)
{
size_t print_left = min(vec.elem_count, 3); size_t print_left = min(vec.elem_count, 3);
size_t print_center = max((long int)vec.elem_count - 6, 0); size_t print_center = max((long int)vec.elem_count - 6, 0);
size_t print_right = min(max((long int)vec.elem_count - 3, 0), 3); size_t print_right = min(max((long int)vec.elem_count - 3, 0), 3);
@ -110,21 +121,26 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags) {
if (flags & CVEC_PRINT_FLAG_MULTILINE) if (flags & CVEC_PRINT_FLAG_MULTILINE)
printf("\n"); printf("\n");
for (size_t i = 0; i < print_left; i++) { for (size_t i = 0; i < print_left; i++)
{
print_func(vec.elem_storage + elems_printed * vec.elem_size); print_func(vec.elem_storage + elems_printed * vec.elem_size);
printf("%c ", sep); printf("%c ", sep);
elems_printed++; elems_printed++;
} }
if (flags & CVEC_PRINT_FLAG_ELLIPSIS) { if (flags & CVEC_PRINT_FLAG_ELLIPSIS)
{
printf("... %lu elements in between ... ", print_center); printf("... %lu elements in between ... ", print_center);
if (flags & CVEC_PRINT_FLAG_MULTILINE) if (flags & CVEC_PRINT_FLAG_MULTILINE)
printf("\n"); printf("\n");
elems_printed += print_center; elems_printed += print_center;
} else { }
for (size_t i = 0; i < print_center; i++) { else
{
for (size_t i = 0; i < print_center; i++)
{
print_func(vec.elem_storage + elems_printed * vec.elem_size); print_func(vec.elem_storage + elems_printed * vec.elem_size);
if (elems_printed != vec.elem_count - 1) if (elems_printed != vec.elem_count - 1)
@ -134,7 +150,8 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags) {
} }
} }
for (size_t i = 0; i < print_right; i++) { for (size_t i = 0; i < print_right; i++)
{
print_func(vec.elem_storage + elems_printed * vec.elem_size); print_func(vec.elem_storage + elems_printed * vec.elem_size);
if (elems_printed != vec.elem_count - 1) if (elems_printed != vec.elem_count - 1)
@ -152,7 +169,8 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags) {
void cvec_free(cvec vec) { free(vec.elem_storage); } void cvec_free(cvec vec) { free(vec.elem_storage); }
#define CVEC_PRIMITIVE_PRINT_FUNC(type, type_name, format_flag) \ #define CVEC_PRIMITIVE_PRINT_FUNC(type, type_name, format_flag) \
void cvec_##type_name##_print_func(void *elem) { \ void cvec_##type_name##_print_func(void *elem) \
{ \
type _elem = *(type *)elem; \ type _elem = *(type *)elem; \
printf(format_flag, _elem); \ printf(format_flag, _elem); \
} }
@ -168,7 +186,8 @@ CVEC_PRIMITIVE_PRINT_FUNC(double, double, "%f")
cvec_append(dest, &_elem); \ cvec_append(dest, &_elem); \
}) })
int main() { int main()
{
int ret = 0; int ret = 0;
cvec vec = {0}; cvec vec = {0};
cvec uint_vec = {0}; cvec uint_vec = {0};
@ -199,7 +218,8 @@ int main() {
cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_NONE); cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_NONE);
for (int i = 0; i < 100; i++) { for (int i = 0; i < 100; i++)
{
ret = cvec_append(&vec, &(int){5 + i}); ret = cvec_append(&vec, &(int){5 + i});
if (ret < 0) if (ret < 0)
return ret; return ret;