Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=0f51f322ce3047cd550a61f2bc54ec8e8624c142
commit 0f51f322ce3047cd550a61f2bc54ec8e8624c142 Author: Michel Hermier <[email protected]> Date: Mon Aug 18 15:01:58 2014 +0200 libpacman: Merge C FList implementation into fptrlist.h. diff --git a/lib/libpacman/CMakeLists.txt b/lib/libpacman/CMakeLists.txt index 82cbf7d..ebe5494 100644 --- a/lib/libpacman/CMakeLists.txt +++ b/lib/libpacman/CMakeLists.txt @@ -24,7 +24,6 @@ set(FLIB_SOURCES util/fcallback.h util/fdispatchlogger.c util/fdispatchlogger.h - util/flist.c util/flist.h util/ffilelogger.c util/ffilelogger.h diff --git a/lib/libpacman/util/flist.c b/lib/libpacman/util/flist.c deleted file mode 100644 index 60e1890..0000000 --- a/lib/libpacman/util/flist.c +++ /dev/null @@ -1,235 +0,0 @@ -/* - * flist.c - * - * Copyright (c) 2002-2006 by Judd Vinet <[email protected]> - * Copyright (c) 2013 by Michel Hermier <[email protected]> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - * USA. - */ - -#include "config.h" - -#include "util/fptrlist.h" - -#include "fstdlib.h" - -#include <assert.h> - -#ifndef F_NOCOMPAT -#define previous prev -#endif - -int f_listitem_delete(FListItem *self, FVisitor *visitor) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - - f_visit(self, visitor); - free(self); - return 0; -} - -int f_listitem_insert_after(FListItem *self, FListItem *previous) -{ - FListItem *next; - - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - ASSERT(previous != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - - next = previous->next; - previous->next = self; - self->next = next; - self->previous = previous; -#ifndef F_NOCOMPAT - if (next != NULL) -#endif - next->previous = self; - return 0; -} - -FListItem *f_listitem_next(FListItem *self) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - - return self->next; -} - -FListItem *f_listitem_previous(FListItem *self) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - - return self->previous; -} - -FList *f_list_new() -{ -#ifndef F_NOCOMPAT - return NULL; -#else - FList *self; - - ASSERT((self = f_zalloc(sizeof(*self))) != NULL, return NULL); - - f_list_init(self); - return self; -#endif -} - -int f_list_delete(FList *self, FVisitor *visitor) -{ - return f_list_fini(self, visitor); -} - -int f_list_init(FList *self) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - -#ifdef F_NOCOMPAT - self->as_FListItem.next = self->as_FListItem.previous = &self->as_FListItem; -#endif - return 0; -} - -int f_list_fini(FList *self, FVisitor *visitor) -{ - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); - - return f_list_clear(self, visitor); -} - -int f_list_append(FList *self, FListItem *item) -{ - return f_listitem_insert_after(item, f_list_last(self)); -} - -int f_list_append_unique(FList *self, FListItem *item, FListItemComparatorFunc comparator) -{ - if (!f_list_contains(self, comparator, item)) { - return f_list_append(self, item); - } - return -1; -} - -int f_list_clear(FList *self, FVisitor *visitor) -{ - return -1; -} - -int f_list_contains(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data) -{ - return f_list_find_const(list, comparator, comparator_data) != NULL; -} - -int f_list_count(const FList *list) -{ - const FListItem *it; - int i; - - for(i = 0, it = f_list_first_const(list); it != f_list_end_const(list); it = it->next, i++); - return i; -} - -int f_list_empty(const FList *list) -{ - return list == NULL; -} - -FListItem *f_list_end(FList *self) -{ - return (FListItem *)f_list_end_const(self); -} - -const FListItem *f_list_end_const(const FList *self) -{ -#ifndef F_NOCOMPAT - return NULL; -#else - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - - return &self->as_FListItem; -#endif -} - -FListItem *f_list_find(FList *self, FListItemComparatorFunc comparator, const void *comparator_data) -{ - return (FListItem *)f_list_find_const(self, comparator, comparator_data); -} - -const FListItem *f_list_find_const(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data) -{ - const FListItem *end = f_list_end_const(list); - const FListItem *it; - - for(it = f_list_first_const(list); it != end; it = it->next) { - if(comparator(it, comparator_data) == 0) { - break; - } - } - return it != end ? it : NULL; -} - -FListItem *f_list_first(FList *self) -{ - return (FListItem *)f_list_first_const(self); -} - -const FListItem *f_list_first_const(const FList *self) -{ - return (FListItem *)self; -} - -void f_list_foreach(const FList *list, FListItemVisitorFunc visitor, void *visitor_data) -{ - const FListItem *it; - - for(it = f_list_first_const(list); it != f_list_end_const(list); it = it->next) { - visitor((FListItem *)it, visitor_data); - } -} - -FListItem *f_list_last(FList *self) -{ - return (FListItem *)f_list_last_const(self); -} - -const FListItem *f_list_last_const(const FList *self) -{ - const FListItem *it; - - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - - it = f_list_first_const(self); - while(it->next != f_list_end_const(self)) { - it = it->next; - } - return it; -} - -FListItem *f_list_rend(FList *self) -{ - return (FListItem *)f_list_rend_const(self); -} - -const FListItem *f_list_rend_const(const FList *self) -{ -#ifndef F_NOCOMPAT - return NULL; -#else - ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - - return &self->as_FListItem; -#endif -} - diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 54ec9ea..b818339 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -343,58 +343,9 @@ private: RET_ERR(PM_ERR_WRONG_ARGS, NULL); } }; - #endif /* F_NOCOMPAT */ - -extern "C" { #endif /* __cplusplus */ -#ifndef F_NOCOMPAT -typedef struct __pmlist_t FList; -typedef struct __pmlist_t FListItem; -#else -typedef struct FList FList; -typedef struct FListItem FListItem; -#endif - -typedef int (*FListItemComparatorFunc)(const FListItem *item, const void *comparator_data); -typedef void (*FListItemVisitorFunc)(FListItem *item, void *visitor_data); - -int f_listitem_delete(FListItem *self, FVisitor *visitor); - -int f_listitem_insert_after(FListItem *self, FListItem *previous); -FListItem *f_listitem_next(FListItem *self); -FListItem *f_listitem_previous(FListItem *self); - -FList *f_list_new(void); -int f_list_delete(FList *self, FVisitor *visitor); - -int f_list_init(FList *self); -int f_list_fini(FList *self, FVisitor *visitor); - -#define f_list_add f_list_append -int f_list_append(FList *self, FListItem *item); -int f_list_append_unique(FList *self, FListItem *item, FListItemComparatorFunc comparator); -int f_list_clear(FList *self, FVisitor *visitor); -int f_list_contains(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data); -int f_list_count(const FList *list); -int f_list_empty(const FList *list); -FListItem *f_list_end(FList *self); -const FListItem *f_list_end_const(const FList *self); -FListItem *f_list_find(FList *self, FListItemComparatorFunc comparator, const void *comparator_data); -const FListItem *f_list_find_const(const FList *self, FListItemComparatorFunc comparator, const void *comparator_data); -FListItem *f_list_first(FList *self); -const FListItem *f_list_first_const(const FList *self); -void f_list_foreach(const FList *list, FListItemVisitorFunc visitor, void *visitor_data); -FListItem *f_list_last(FList *self); -const FListItem *f_list_last_const(const FList *self); -FListItem *f_list_rend(FList *self); -const FListItem *f_list_rend_const(const FList *self); - -#ifdef __cplusplus -} -#endif - #endif /* F_LIST_H */ /* vim: set ts=2 sw=2 noet: */ diff --git a/lib/libpacman/util/fptrlist.c b/lib/libpacman/util/fptrlist.c index 875d9ce..bca5d96 100644 --- a/lib/libpacman/util/fptrlist.c +++ b/lib/libpacman/util/fptrlist.c @@ -26,6 +26,211 @@ #include "fstdlib.h" +#ifndef F_NOCOMPAT +#define previous prev +#endif + +int f_listitem_delete(FListItem *self, FVisitor *visitor) +{ + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + + f_visit(self, visitor); + free(self); + return 0; +} + +int f_listitem_insert_after(FListItem *self, FListItem *previous) +{ + FListItem *next; + + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + ASSERT(previous != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + + next = previous->next; + previous->next = self; + self->next = next; + self->previous = previous; +#ifndef F_NOCOMPAT + if (next != NULL) +#endif + next->previous = self; + return 0; +} + +FListItem *f_listitem_next(FListItem *self) +{ + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + return self->next; +} + +FListItem *f_listitem_previous(FListItem *self) +{ + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + return self->previous; +} + +FList *f_list_new() +{ +#ifndef F_NOCOMPAT + return NULL; +#else + FList *self; + + ASSERT((self = f_zalloc(sizeof(*self))) != NULL, return NULL); + + f_list_init(self); + return self; +#endif +} + +int f_list_delete(FList *self, FVisitor *visitor) +{ + return f_list_fini(self, visitor); +} + +int f_list_init(FList *self) +{ + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + +#ifdef F_NOCOMPAT + self->as_FListItem.next = self->as_FListItem.previous = &self->as_FListItem; +#endif + return 0; +} + +int f_list_fini(FList *self, FVisitor *visitor) +{ + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, -1)); + + return f_list_clear(self, visitor); +} + +int f_list_append(FList *self, FListItem *item) +{ + return f_listitem_insert_after(item, f_list_last(self)); +} + +int f_list_append_unique(FList *self, FListItem *item, FListItemComparatorFunc comparator) +{ + if (!f_list_contains(self, comparator, item)) { + return f_list_append(self, item); + } + return -1; +} + +int f_list_clear(FList *self, FVisitor *visitor) +{ + return -1; +} + +int f_list_contains(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data) +{ + return f_list_find_const(list, comparator, comparator_data) != NULL; +} + +int f_list_count(const FList *list) +{ + const FListItem *it; + int i; + + for(i = 0, it = f_list_first_const(list); it != f_list_end_const(list); it = it->next, i++); + return i; +} + +int f_list_empty(const FList *list) +{ + return list == NULL; +} + +FListItem *f_list_end(FList *self) +{ + return (FListItem *)f_list_end_const(self); +} + +const FListItem *f_list_end_const(const FList *self) +{ +#ifndef F_NOCOMPAT + return NULL; +#else + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + return &self->as_FListItem; +#endif +} + +FListItem *f_list_find(FList *self, FListItemComparatorFunc comparator, const void *comparator_data) +{ + return (FListItem *)f_list_find_const(self, comparator, comparator_data); +} + +const FListItem *f_list_find_const(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data) +{ + const FListItem *end = f_list_end_const(list); + const FListItem *it; + + for(it = f_list_first_const(list); it != end; it = it->next) { + if(comparator(it, comparator_data) == 0) { + break; + } + } + return it != end ? it : NULL; +} + +FListItem *f_list_first(FList *self) +{ + return (FListItem *)f_list_first_const(self); +} + +const FListItem *f_list_first_const(const FList *self) +{ + return (FListItem *)self; +} + +void f_list_foreach(const FList *list, FListItemVisitorFunc visitor, void *visitor_data) +{ + const FListItem *it; + + for(it = f_list_first_const(list); it != f_list_end_const(list); it = it->next) { + visitor((FListItem *)it, visitor_data); + } +} + +FListItem *f_list_last(FList *self) +{ + return (FListItem *)f_list_last_const(self); +} + +const FListItem *f_list_last_const(const FList *self) +{ + const FListItem *it; + + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + it = f_list_first_const(self); + while(it->next != f_list_end_const(self)) { + it = it->next; + } + return it; +} + +FListItem *f_list_rend(FList *self) +{ + return (FListItem *)f_list_rend_const(self); +} + +const FListItem *f_list_rend_const(const FList *self) +{ +#ifndef F_NOCOMPAT + return NULL; +#else + ASSERT(self != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); + + return &self->as_FListItem; +#endif +} + FPtrListItem *f_ptrlistitem_new(void *ptr) { FPtrListItem *item = f_zalloc(sizeof(*item)); diff --git a/lib/libpacman/util/fptrlist.h b/lib/libpacman/util/fptrlist.h index df39f40..f8a1fc0 100644 --- a/lib/libpacman/util/fptrlist.h +++ b/lib/libpacman/util/fptrlist.h @@ -33,7 +33,7 @@ extern "C" { struct __pmlist_t { struct __pmlist_t *prev; struct __pmlist_t *next; - void *data; + void *data; }; typedef struct __pmlist_t FPtrList; @@ -46,6 +46,48 @@ typedef struct FPtrListItem FPtrListItem; #include "util/flist.h" #include "util/list.h" +#ifndef F_NOCOMPAT +typedef struct __pmlist_t FList; +typedef struct __pmlist_t FListItem; +#else +typedef struct FList FList; +typedef struct FListItem FListItem; +#endif + +typedef int (*FListItemComparatorFunc)(const FListItem *item, const void *comparator_data); +typedef void (*FListItemVisitorFunc)(FListItem *item, void *visitor_data); + +int f_listitem_delete(FListItem *self, FVisitor *visitor); + +int f_listitem_insert_after(FListItem *self, FListItem *previous); +FListItem *f_listitem_next(FListItem *self); +FListItem *f_listitem_previous(FListItem *self); + +FList *f_list_new(void); +int f_list_delete(FList *self, FVisitor *visitor); + +int f_list_init(FList *self); +int f_list_fini(FList *self, FVisitor *visitor); + +#define f_list_add f_list_append +int f_list_append(FList *self, FListItem *item); +int f_list_append_unique(FList *self, FListItem *item, FListItemComparatorFunc comparator); +int f_list_clear(FList *self, FVisitor *visitor); +int f_list_contains(const FList *list, FListItemComparatorFunc comparator, const void *comparator_data); +int f_list_count(const FList *list); +int f_list_empty(const FList *list); +FListItem *f_list_end(FList *self); +const FListItem *f_list_end_const(const FList *self); +FListItem *f_list_find(FList *self, FListItemComparatorFunc comparator, const void *comparator_data); +const FListItem *f_list_find_const(const FList *self, FListItemComparatorFunc comparator, const void *comparator_data); +FListItem *f_list_first(FList *self); +const FListItem *f_list_first_const(const FList *self); +void f_list_foreach(const FList *list, FListItemVisitorFunc visitor, void *visitor_data); +FListItem *f_list_last(FList *self); +const FListItem *f_list_last_const(const FList *self); +FListItem *f_list_rend(FList *self); +const FListItem *f_list_rend_const(const FList *self); + FPtrListItem *f_ptrlistitem_new(void *data); int f_ptrlistitem_delete(FListItem *self, FVisitor *visitor); _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
