Cleanup code and update clang-format
This commit is contained in:
parent
6a0123a52b
commit
9855146f8b
|
@ -1,41 +1,61 @@
|
|||
---
|
||||
BasedOnStyle: LLVM
|
||||
AlignConsecutiveMacros: 'true'
|
||||
AlignConsecutiveAssignments: 'true'
|
||||
AlignConsecutiveDeclarations: 'true'
|
||||
AlignEscapedNewlines: Left
|
||||
AllowShortBlocksOnASingleLine: 'true'
|
||||
AllowShortCaseLabelsOnASingleLine: 'true'
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Always
|
||||
AllowShortLoopsOnASingleLine: 'true'
|
||||
AlwaysBreakAfterDefinitionReturnType: TopLevel
|
||||
AlwaysBreakAfterReturnType: AllDefinitions
|
||||
AlwaysBreakBeforeMultilineStrings: 'false'
|
||||
BinPackArguments: 'false'
|
||||
BinPackParameters: 'false'
|
||||
BreakBeforeBinaryOperators: NonAssignment
|
||||
BreakBeforeBraces: Linux
|
||||
BreakStringLiterals: 'false'
|
||||
ColumnLimit: '150'
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: 'true'
|
||||
Cpp11BracedListStyle: 'false'
|
||||
IncludeBlocks: Regroup
|
||||
IndentCaseLabels: 'true'
|
||||
IndentPPDirectives: None
|
||||
IndentWidth: '8'
|
||||
Standard: Auto
|
||||
Language: Cpp
|
||||
PointerAlignment: Left
|
||||
ReflowComments: 'true'
|
||||
SortIncludes: 'true'
|
||||
SpaceAfterCStyleCast: 'true'
|
||||
SpaceAfterLogicalNot: 'false'
|
||||
SpaceBeforeAssignmentOperators: 'true'
|
||||
SpaceBeforeCpp11BracedList: 'true'
|
||||
SpaceBeforeParens: ControlStatements
|
||||
SpacesInCStyleCastParentheses: 'false'
|
||||
Standard: Cpp11
|
||||
TabWidth: '8'
|
||||
BasedOnStyle: LLVM
|
||||
ColumnLimit: 0
|
||||
IndentWidth: 8
|
||||
TabWidth: 8
|
||||
UseTab: ForIndentation
|
||||
|
||||
AlignConsecutiveAssignments: true
|
||||
AlignConsecutiveBitFields: true
|
||||
AlignConsecutiveDeclarations: true
|
||||
AlignConsecutiveMacros: true
|
||||
AlignEscapedNewlines: Left
|
||||
AlignOperands: AlignAfterOperator
|
||||
AlignTrailingComments: true
|
||||
|
||||
AllowShortBlocksOnASingleLine: Always
|
||||
AllowShortCaseLabelsOnASingleLine: true
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: All
|
||||
AllowShortIfStatementsOnASingleLine: Always
|
||||
AllowShortLoopsOnASingleLine: true
|
||||
|
||||
AlwaysBreakAfterDefinitionReturnType: TopLevel
|
||||
AlwaysBreakAfterReturnType: None
|
||||
AlwaysBreakBeforeMultilineStrings: true
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
|
||||
BinPackArguments: false
|
||||
BinPackParameters: false
|
||||
|
||||
BreakBeforeBinaryOperators: All
|
||||
BreakBeforeBraces: Attach
|
||||
BreakBeforeTernaryOperators: true
|
||||
|
||||
BreakStringLiterals: false
|
||||
BreakConstructorInitializers: AfterColon
|
||||
|
||||
IndentCaseLabels: true
|
||||
IndentPPDirectives: None
|
||||
IndentGotoLabels: true
|
||||
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ContinuationIndentWidth: 2
|
||||
Cpp11BracedListStyle: true
|
||||
IncludeBlocks: Regroup
|
||||
InsertTrailingCommas: Wrapped
|
||||
PointerAlignment: Right
|
||||
ReflowComments: true
|
||||
SortIncludes: true
|
||||
SpaceAfterCStyleCast: true
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceBeforeAssignmentOperators: true
|
||||
SpaceBeforeCpp11BracedList: true
|
||||
SpaceBeforeParens: Always
|
||||
SpacesInConditionalStatement: false
|
||||
SpacesInCStyleCastParentheses: false
|
||||
SpacesInParentheses: false
|
||||
|
||||
...
|
||||
|
|
316
llist.c
316
llist.c
|
@ -22,27 +22,27 @@
|
|||
#include <stdint.h> // uintmax_t
|
||||
#include <stdlib.h> // malloc() free()
|
||||
|
||||
static cl_llist_err corelibs_llist_create(void*, void (*)(void*), cl_llist_t**);
|
||||
static cl_llist_err corelibs_llist_create (void *, void (*) (void *), cl_llist_t **);
|
||||
|
||||
static cl_llist_err corelibs_llist_link(uintmax_t, ...);
|
||||
static cl_llist_err corelibs_llist_rep(cl_llist_t*, cl_llist_t*);
|
||||
static cl_llist_err corelibs_llist_link (uintmax_t, ...);
|
||||
static cl_llist_err corelibs_llist_rep (cl_llist_t *, cl_llist_t *);
|
||||
|
||||
static cl_llist_err corelibs_llist_free_list(cl_llist_t*);
|
||||
static cl_llist_err corelibs_llist_free_elem(cl_llist_t*);
|
||||
static cl_llist_err corelibs_llist_free_list (cl_llist_t *);
|
||||
static cl_llist_err corelibs_llist_free_elem (cl_llist_t *);
|
||||
|
||||
static cl_llist_err corelibs_llist_set_cont(cl_llist_t*, void*);
|
||||
static cl_llist_err corelibs_llist_set_free(cl_llist_t*, void (*)(void*));
|
||||
static cl_llist_err corelibs_llist_set_cont (cl_llist_t *, void *);
|
||||
static cl_llist_err corelibs_llist_set_free (cl_llist_t *, void (*) (void *));
|
||||
|
||||
static cl_llist_err corelibs_llist_get_next(const cl_llist_t*, cl_llist_t**);
|
||||
static cl_llist_err corelibs_llist_get_prev(const cl_llist_t*, cl_llist_t**);
|
||||
static cl_llist_err corelibs_llist_get_cont(const cl_llist_t*, void**);
|
||||
static cl_llist_err corelibs_llist_get_next (const cl_llist_t *, cl_llist_t **);
|
||||
static cl_llist_err corelibs_llist_get_prev (const cl_llist_t *, cl_llist_t **);
|
||||
static cl_llist_err corelibs_llist_get_cont (const cl_llist_t *, void **);
|
||||
|
||||
static void corelibs_llist_remove(cl_llist_t*);
|
||||
static void corelibs_llist_remove (cl_llist_t *);
|
||||
|
||||
struct cl_llist_t {
|
||||
struct cl_llist_t *next, *prev;
|
||||
void* cont;
|
||||
void (*free)(void*);
|
||||
void * cont;
|
||||
void (*free) (void *);
|
||||
};
|
||||
|
||||
enum { // Avoid collision in error numbers
|
||||
|
@ -55,239 +55,183 @@ enum { // Avoid collision in error numbers
|
|||
};
|
||||
|
||||
struct corelibs_llist_interface const cl_llist = {
|
||||
.create = corelibs_llist_create,
|
||||
.link = corelibs_llist_link,
|
||||
.rep = corelibs_llist_rep,
|
||||
.free = {
|
||||
.list = corelibs_llist_free_list,
|
||||
.elem = corelibs_llist_free_elem,
|
||||
},
|
||||
.set = {
|
||||
.cont = corelibs_llist_set_cont,
|
||||
.free = corelibs_llist_set_free,
|
||||
},
|
||||
.get = {
|
||||
.prev = corelibs_llist_get_prev,
|
||||
.cont = corelibs_llist_get_cont,
|
||||
.next = corelibs_llist_get_next,
|
||||
},
|
||||
.err = {
|
||||
.ok = CORELIBS_LLIST_ERR_OK,
|
||||
.unknown = CORELIBS_LLIST_ERR_UNK,
|
||||
.undef = CORELIBS_LLIST_ERR_UNDEF,
|
||||
.mem = {
|
||||
.null = CORELIBS_LLIST_ERR_MEM_NULL,
|
||||
.alloc = CORELIBS_LLIST_ERR_MEM_ALLOC,
|
||||
},
|
||||
.args = {
|
||||
.mis = CORELIBS_LLIST_ERR_ARGS_MIS,
|
||||
},
|
||||
},
|
||||
.create = corelibs_llist_create,
|
||||
.link = corelibs_llist_link,
|
||||
.rep = corelibs_llist_rep,
|
||||
.free = {
|
||||
.list = corelibs_llist_free_list,
|
||||
.elem = corelibs_llist_free_elem,
|
||||
},
|
||||
.set = {
|
||||
.cont = corelibs_llist_set_cont,
|
||||
.free = corelibs_llist_set_free,
|
||||
},
|
||||
.get = {
|
||||
.prev = corelibs_llist_get_prev,
|
||||
.cont = corelibs_llist_get_cont,
|
||||
.next = corelibs_llist_get_next,
|
||||
},
|
||||
.err = {
|
||||
.ok = CORELIBS_LLIST_ERR_OK,
|
||||
.unknown = CORELIBS_LLIST_ERR_UNK,
|
||||
.undef = CORELIBS_LLIST_ERR_UNDEF,
|
||||
.mem = {
|
||||
.null = CORELIBS_LLIST_ERR_MEM_NULL,
|
||||
.alloc = CORELIBS_LLIST_ERR_MEM_ALLOC,
|
||||
},
|
||||
.args = {
|
||||
.mis = CORELIBS_LLIST_ERR_ARGS_MIS,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_create(void* c, void (*const f)(void*), cl_llist_t** s)
|
||||
{
|
||||
corelibs_llist_create (void *c, void (*const f) (void *), cl_llist_t **s) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
cl_llist_t* cur = malloc(sizeof(*cur));
|
||||
if (cur == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_ALLOC;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
cur->prev = NULL;
|
||||
cur->next = NULL;
|
||||
cur->cont = c;
|
||||
cur->free = f;
|
||||
|
||||
*s = cur;
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_free_list(cl_llist_t* l)
|
||||
{
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (l == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
}
|
||||
|
||||
// Free previous elements if we have any
|
||||
if (l->prev != NULL) {
|
||||
for (cl_llist_t* p = l->prev; p != NULL;) {
|
||||
cl_llist_t* c = p;
|
||||
p = p->prev;
|
||||
corelibs_llist_remove(c);
|
||||
if (s == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
cl_llist_t *cur = malloc (sizeof (*cur));
|
||||
if (cur != NULL) {
|
||||
cur->prev = NULL;
|
||||
cur->next = NULL;
|
||||
cur->cont = c;
|
||||
cur->free = f;
|
||||
*s = cur;
|
||||
} else {
|
||||
err = CORELIBS_LLIST_ERR_MEM_ALLOC;
|
||||
}
|
||||
}
|
||||
|
||||
// Free current and next elements
|
||||
for (cl_llist_t* p = l; p != NULL;) {
|
||||
cl_llist_t* c = p;
|
||||
p = p->next;
|
||||
corelibs_llist_remove(c);
|
||||
}
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_free_elem(cl_llist_t* l)
|
||||
{
|
||||
corelibs_llist_free_list (cl_llist_t *l) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
if (l == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
// Free previous elements if we have any
|
||||
if (l->prev != NULL) {
|
||||
for (cl_llist_t *p = l->prev; p != NULL;) {
|
||||
cl_llist_t *c = p;
|
||||
p = p->prev;
|
||||
corelibs_llist_remove (c);
|
||||
}
|
||||
}
|
||||
|
||||
if (l == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
// Free current and next elements
|
||||
for (cl_llist_t *p = l; p != NULL;) {
|
||||
cl_llist_t *c = p;
|
||||
p = p->next;
|
||||
corelibs_llist_remove (c);
|
||||
}
|
||||
}
|
||||
corelibs_llist_remove(l);
|
||||
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_link(uintmax_t cnt, ...)
|
||||
{
|
||||
corelibs_llist_free_elem (cl_llist_t *l) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (cnt <= 1) {
|
||||
err = CORELIBS_LLIST_ERR_ARGS_MIS;
|
||||
goto ret;
|
||||
if (l == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
corelibs_llist_remove (l);
|
||||
}
|
||||
|
||||
va_list ap;
|
||||
va_start(ap, cnt);
|
||||
|
||||
uintmax_t ccnt = 0;
|
||||
cl_llist_t *a = NULL, *b = NULL;
|
||||
while (ccnt < cnt) {
|
||||
a = b;
|
||||
b = va_arg(ap, cl_llist_t*);
|
||||
if (ccnt < 1) continue; // Fill at least first 2 slots
|
||||
|
||||
if (a != NULL) a->next = b;
|
||||
if (b != NULL) b->prev = a;
|
||||
|
||||
ccnt++;
|
||||
}
|
||||
|
||||
va_end(ap);
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_rep(cl_llist_t* dest, cl_llist_t* src)
|
||||
{
|
||||
corelibs_llist_link (uintmax_t cnt, ...) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
if (cnt <= 1) err = CORELIBS_LLIST_ERR_ARGS_MIS;
|
||||
if (!err) {
|
||||
va_list ap;
|
||||
va_start (ap, cnt);
|
||||
|
||||
if (src == NULL || dest == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
uintmax_t ccnt = 0;
|
||||
cl_llist_t *a = NULL, *b = NULL;
|
||||
while (ccnt < cnt) {
|
||||
a = b;
|
||||
b = va_arg (ap, cl_llist_t *);
|
||||
if (ccnt < 1) continue; // Fill at least first 2 slots
|
||||
|
||||
if (a != NULL) a->next = b;
|
||||
if (b != NULL) b->prev = a;
|
||||
|
||||
ccnt++;
|
||||
}
|
||||
|
||||
va_end (ap);
|
||||
}
|
||||
|
||||
if (dest->prev != NULL) dest->prev->next = src;
|
||||
if (dest->next != NULL) dest->next->prev = src;
|
||||
|
||||
corelibs_llist_free_elem(dest);
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_get_next(const cl_llist_t* e, cl_llist_t** save)
|
||||
{
|
||||
corelibs_llist_rep (cl_llist_t *dest, cl_llist_t *src) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (e == NULL || save == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
if (src == NULL || dest == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
if (dest->prev != NULL) dest->prev->next = src;
|
||||
if (dest->next != NULL) dest->next->prev = src;
|
||||
corelibs_llist_free_elem (dest);
|
||||
}
|
||||
|
||||
if (e->next == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_UNDEF;
|
||||
goto ret;
|
||||
}
|
||||
*save = e->next;
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_get_prev(const cl_llist_t* e, cl_llist_t** save)
|
||||
{
|
||||
corelibs_llist_get_next (const cl_llist_t *e, cl_llist_t **save) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (e == NULL || save == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
if (e == NULL || save == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (e->next == NULL) err = CORELIBS_LLIST_ERR_UNDEF;
|
||||
if (!err) {
|
||||
*save = e->next;
|
||||
}
|
||||
|
||||
if (e->prev == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_UNDEF;
|
||||
goto ret;
|
||||
}
|
||||
*save = e->prev;
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_get_cont(const cl_llist_t* e, void** save)
|
||||
{
|
||||
corelibs_llist_get_prev (const cl_llist_t *e, cl_llist_t **save) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (e == NULL || save == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
if (e == NULL || save == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (e->prev == NULL) err = CORELIBS_LLIST_ERR_UNDEF;
|
||||
if (!err) {
|
||||
*save = e->prev;
|
||||
}
|
||||
|
||||
*save = e->cont;
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_set_cont(cl_llist_t* e, void* i)
|
||||
{
|
||||
corelibs_llist_get_cont (const cl_llist_t *e, void **save) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (e == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
if (e == NULL || save == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
*save = e->cont;
|
||||
}
|
||||
|
||||
e->cont = i;
|
||||
ret:
|
||||
return err;
|
||||
}
|
||||
|
||||
static cl_llist_err
|
||||
corelibs_llist_set_free(cl_llist_t* e, void (*const f)(void*))
|
||||
{
|
||||
corelibs_llist_set_cont (cl_llist_t *e, void *i) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
|
||||
if (e == NULL) {
|
||||
err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
goto ret;
|
||||
if (e == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
e->cont = i;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
e->free = f;
|
||||
ret:
|
||||
static cl_llist_err
|
||||
corelibs_llist_set_free (cl_llist_t *e, void (*const f) (void *)) {
|
||||
cl_llist_err err = CORELIBS_LLIST_ERR_OK;
|
||||
if (e == NULL) err = CORELIBS_LLIST_ERR_MEM_NULL;
|
||||
if (!err) {
|
||||
e->free = f;
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
// Private function
|
||||
static void
|
||||
corelibs_llist_remove(cl_llist_t* e)
|
||||
{
|
||||
corelibs_llist_link(2, e->prev, e->next);
|
||||
if (e->free != NULL) e->free(e->cont);
|
||||
free(e);
|
||||
corelibs_llist_remove (cl_llist_t *e) {
|
||||
corelibs_llist_link (2, e->prev, e->next);
|
||||
if (e->free != NULL) e->free (e->cont);
|
||||
free (e);
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue