Reformat code
This commit is contained in:
parent
4e8ae2e0d7
commit
f987a9608c
77
main.c
77
main.c
@ -23,8 +23,7 @@ typedef struct {
|
|||||||
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),
|
||||||
@ -40,47 +39,44 @@ 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 = 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)
|
if (!dest->elem_storage)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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++;
|
dest->elem_count++;
|
||||||
|
|
||||||
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 = 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)
|
if (dest->elem_storage)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
@ -89,8 +85,7 @@ 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);
|
||||||
@ -103,8 +98,7 @@ typedef enum {
|
|||||||
} 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);
|
||||||
@ -116,26 +110,21 @@ 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 {
|
||||||
else
|
for (size_t i = 0; i < print_center; i++) {
|
||||||
{
|
|
||||||
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)
|
||||||
@ -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);
|
print_func(vec.elem_storage + elems_printed * vec.elem_size);
|
||||||
|
|
||||||
if (elems_printed != vec.elem_count - 1)
|
if (elems_printed != vec.elem_count - 1)
|
||||||
@ -161,15 +149,11 @@ void cvec_print(cvec vec, cvec_print_func print_func, cvec_print_flag flags)
|
|||||||
printf("]\n");
|
printf("]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cvec_free(cvec vec)
|
void cvec_free(cvec vec) { free(vec.elem_storage); }
|
||||||
{
|
|
||||||
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); \
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,11 +163,12 @@ CVEC_PRIMITIVE_PRINT_FUNC(float, float, "%f")
|
|||||||
CVEC_PRIMITIVE_PRINT_FUNC(double, double, "%f")
|
CVEC_PRIMITIVE_PRINT_FUNC(double, double, "%f")
|
||||||
|
|
||||||
#define CVEC_APPEND(dest, elem) \
|
#define CVEC_APPEND(dest, elem) \
|
||||||
({ typeof(elem) _elem = (elem); \
|
({ \
|
||||||
cvec_append(dest, &_elem); })
|
typeof(elem) _elem = (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};
|
||||||
@ -214,14 +199,14 @@ 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
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_pop(&vec);
|
||||||
cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_NONE);
|
cvec_print(vec, cvec_int_print_func, CVEC_PRINT_FLAG_NONE);
|
||||||
cvec_erase(&vec);
|
cvec_erase(&vec);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user