Reformat code

This commit is contained in:
Maciej Krzyżanowski 2025-02-17 01:03:36 +01:00
parent 4e8ae2e0d7
commit f987a9608c

121
main.c
View File

@ -2,18 +2,18 @@
#include <stdlib.h>
#include <string.h>
#define max(a, b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a > _b ? _a : _b; \
#define max(a, b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a > _b ? _a : _b; \
})
#define min(a, b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a < _b ? _a : _b; \
#define min(a, b) \
({ \
typeof(a) _a = (a); \
typeof(b) _b = (b); \
_a < _b ? _a : _b; \
})
typedef struct {
@ -23,14 +23,13 @@ typedef struct {
size_t elem_count_cap;
} 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;
cvec result = {
.elem_storage = malloc(init_count_cap * elem_size),
.elem_count = 0,
.elem_size = elem_size,
.elem_count_cap = init_count_cap,
.elem_storage = malloc(init_count_cap * elem_size),
.elem_count = 0,
.elem_size = elem_size,
.elem_count_cap = init_count_cap,
};
if (!result.elem_storage)
@ -40,47 +39,44 @@ int cvec_new(cvec *dest, size_t elem_size)
return 0;
}
int cvec_extend(cvec *dest)
{
int cvec_extend(cvec *dest) {
dest->elem_count_cap *= 2;
dest->elem_storage = realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
dest->elem_storage =
realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
if (!dest->elem_storage)
return -1;
return 0;
}
int cvec_append(cvec *dest, void *elem)
{
if (dest->elem_count == dest->elem_count_cap)
{
int cvec_append(cvec *dest, void *elem) {
if (dest->elem_count == dest->elem_count_cap) {
if (cvec_extend(dest))
return -1;
}
memcpy(dest->elem_storage + dest->elem_size * dest->elem_count, elem, dest->elem_size);
memcpy(dest->elem_storage + dest->elem_size * dest->elem_count, elem,
dest->elem_size);
dest->elem_count++;
return 0;
}
int cvec_shrink(cvec *dest)
{
int cvec_shrink(cvec *dest) {
dest->elem_count_cap /= 2;
dest->elem_storage = realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
dest->elem_storage =
realloc(dest->elem_storage, dest->elem_count_cap * dest->elem_size);
if (dest->elem_storage)
return -1;
return 0;
}
int cvec_pop(cvec *dest)
{
int cvec_pop(cvec *dest) {
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))
return -1;
}
@ -89,8 +85,7 @@ int cvec_pop(cvec *dest)
}
void cvec_free(cvec vec);
int cvec_erase(cvec *dest)
{
int cvec_erase(cvec *dest) {
size_t elem_size = dest->elem_size;
cvec_free(*dest);
return cvec_new(dest, elem_size);
@ -103,8 +98,7 @@ typedef enum {
} cvec_print_flag;
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_center = max((long int)vec.elem_count - 6, 0);
size_t print_right = min(max((long int)vec.elem_count - 3, 0), 3);
@ -116,26 +110,21 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags)
if (flags & CVEC_PRINT_FLAG_MULTILINE)
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);
printf("%c ", sep);
elems_printed++;
}
if (flags & CVEC_PRINT_FLAG_ELLIPSIS)
{
if (flags & CVEC_PRINT_FLAG_ELLIPSIS) {
printf("... %lu elements in between ... ", print_center);
if (flags & CVEC_PRINT_FLAG_MULTILINE)
printf("\n");
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);
if (elems_printed != vec.elem_count - 1)
@ -145,8 +134,7 @@ 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);
if (elems_printed != vec.elem_count - 1)
@ -154,23 +142,19 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags)
elems_printed++;
}
if (flags & CVEC_PRINT_FLAG_MULTILINE)
printf("\n");
printf("]\n");
}
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) \
void cvec_##type_name##_print_func(void *elem) \
{ \
type _elem = *(type*)elem; \
printf(format_flag, _elem); \
#define CVEC_PRIMITIVE_PRINT_FUNC(type, type_name, format_flag) \
void cvec_##type_name##_print_func(void *elem) { \
type _elem = *(type *)elem; \
printf(format_flag, _elem); \
}
CVEC_PRIMITIVE_PRINT_FUNC(int, int, "%d")
@ -178,12 +162,13 @@ CVEC_PRIMITIVE_PRINT_FUNC(unsigned int, uint, "%u")
CVEC_PRIMITIVE_PRINT_FUNC(float, float, "%f")
CVEC_PRIMITIVE_PRINT_FUNC(double, double, "%f")
#define CVEC_APPEND(dest, elem) \
({ typeof(elem) _elem = (elem); \
cvec_append(dest, &_elem); })
#define CVEC_APPEND(dest, elem) \
({ \
typeof(elem) _elem = (elem); \
cvec_append(dest, &_elem); \
})
int main()
{
int main() {
int ret = 0;
cvec vec = {0};
cvec uint_vec = {0};
@ -214,14 +199,14 @@ int main()
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});
if (ret < 0)
return ret;
}
cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_ELLIPSIS | CVEC_PRINT_FLAG_MULTILINE);
cvec_print(vec, cvec_int_print_func,
CVEC_PRINT_FLAG_ELLIPSIS | CVEC_PRINT_FLAG_MULTILINE);
cvec_pop(&vec);
cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_NONE);
cvec_erase(&vec);