diff --git a/.clang-format b/.clang-format index 07327a4..4e18d0e 100644 --- a/.clang-format +++ b/.clang-format @@ -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 + ... diff --git a/llist.c b/llist.c index 1e24158..e678aca 100644 --- a/llist.c +++ b/llist.c @@ -22,27 +22,27 @@ #include // uintmax_t #include // 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); } -