Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=82d032d4d86be0fbcb15b3277ab726c335a4f988
commit 82d032d4d86be0fbcb15b3277ab726c335a4f988 Author: Michel Hermier <[email protected]> Date: Sun Jun 9 11:52:04 2013 +0200 libflib: Additionnal FList changes. diff --git a/lib/libflib/flist.c b/lib/libflib/flist.c index 03569b9..cf13b54 100644 --- a/lib/libflib/flist.c +++ b/lib/libflib/flist.c @@ -52,18 +52,6 @@ void f_listitem_delete (FListItem *listitem, FVisitorFunc fn, void *user_data) { f_free (listitem); } -FListItem *f_listitem_next (FListItem *listitem) { - assert (listitem != NULL); - - return listitem->next; -} - -FListItem *f_listitem_previous (FListItem *listitem) { - assert (listitem != NULL); - - return listitem->previous; -} - /** * Insert a @listitem after @listitem_ref. */ @@ -203,20 +191,29 @@ void *f_ptrcpy(const void *p) { } static -void f_ptrlistitem_visit (FListItem *listitem, FVisitorFunc fn, void *user_data); - -static FPtrListItem *f_ptrlistitem_of_listitem (FListItem *listitem) { return f_list_entry (listitem, FPtrListItem, base); } +static +void f_ptrlistitem_visit (FListItem *listitem, FVisitorFunc fn, void *user_data) { + FVisitor visitor = { + .fn = fn, + .user_data = user_data + }; + + assert (listitem != NULL); + + f_visit (f_ptrlistitem_of_listitem (listitem)->data, &visitor); +} + FPtrListItem *f_ptrlistitem_new (void *data) { - FPtrListItem *item = f_zalloc (sizeof(FPtrList)); + FPtrListItem *ptrlistitem = f_zalloc (sizeof (*ptrlistitem)); - if (item != NULL) { - item->data = data; + if (ptrlistitem != NULL) { + ptrlistitem->data = data; } - return item; + return ptrlistitem; } static @@ -250,25 +247,6 @@ void f_ptrlistitem_set (FPtrListItem *ptrlistitem, void *data) { ptrlistitem->data = data; } -void f_ptrlistitem_visit (FListItem *listitem, FVisitorFunc fn, void *user_data) { - FVisitor visitor = { - .fn = fn, - .user_data = user_data - }; - - assert (listitem != NULL); - - f_visit (f_ptrlistitem_of_listitem (listitem)->data, &visitor); -} - -FPtrListItem *f_ptrlistitem_next (FPtrListItem *item) { - return item != NULL ? item->next : NULL; -} - -FPtrListItem *f_ptrlistitem_previous (FPtrListItem *item) { - return item != NULL ? item->prev : NULL; -} - /** * Remove an @item from the list it belongs. */ diff --git a/lib/libflib/flist.h b/lib/libflib/flist.h index 0098186..6bd0aee 100644 --- a/lib/libflib/flist.h +++ b/lib/libflib/flist.h @@ -37,9 +37,6 @@ void f_listitem_fini (FListItem *listitem, FVisitorFunc fn, void *user_data); void f_listitem_delete (FListItem *listitem, FVisitorFunc fn, void *user_data); -FListItem *f_listitem_next (FListItem *listitem); -FListItem *f_listitem_previous (FListItem *listitem); - void f_listitem_insert_after (FListItem *listitem, FListItem *listitem_ref); void f_listitem_insert_before (FListItem *listitem, FListItem *listitem_ref); void f_listitem_insert_range_after (FListItem *listitem_first, FListItem *listitem_last, FListItem *listitem_ref); @@ -71,27 +68,33 @@ void f_list_add_sorted (FList *list, FListItem *listitem, FCompareFunc fn, void void f_list_append (FList *list, FListItem *listitem); #define f_list_entry(ptr, type, member) \ - f_containerof (ptr, type, member) + f_containerof (f_identity_cast (FListItem *, ptr), type, member) + +#define f_list_entry_next(ptr, type, member) \ + f_list_entry (f_identity_cast (type *, ptr)->member.next, type, member) + +#define f_list_entry_previous(ptr, type, member) \ + f_list_entry (f_identity_cast (type *, ptr)->member.previous, type, member) #if 0 #define f_foreach(it, list) \ for (it = f_list_begin (f_identity_cast(FList *, list)); \ it != f_list_end (list); \ - it = f_identity_cast(FListItem *, it->next)) + it = f_identity_cast(FListItem *, it)->next) #endif #define f_foreach_entry(it, list, member) \ for (it = f_list_entry (f_list_begin (list), f_typeof (*it), member); \ &it->member != f_list_end (list); \ - it = f_list_entry (it->member.next, f_typeof (*it), member)) + it = f_list_entry_next (it, f_typeof (*it), member)) #if 0 #define f_rforeach(it, list) \ for (it = f_list_rbegin (f_identity_cast(FList *, list)); \ it != f_list_rend (FList *, list); \ - it = f_identity_cast(FListItem *, it->next)) + it = f_identity_cast(FListItem *, it)->previous) #endif #define f_rforeach_entry(it, list, member) \ for (it = f_list_entry (f_list_rbegin (list), f_typeof (*it), member); \ &it->member != f_list_rend (list); \ - it = f_list_entry (it->member.previous, f_typeof(*it), member)) + it = f_list_entry_previous (it, f_typeof(*it), member)) typedef struct FPtrListItem FPtrListItem; @@ -112,8 +115,6 @@ void f_ptrlistitem_delete (FPtrListItem *item, FVisitorFunc fn, void *user_data) void *f_ptrlistitem_get (FPtrListItem *item); void f_ptrlistitem_set (FPtrListItem *item, void *data); -FPtrListItem *f_ptrlistitem_next (FPtrListItem *item); -FPtrListItem *f_ptrlistitem_previous (FPtrListItem *item); void f_ptrlistitem_remove (FPtrListItem *item); /* FIXME: Make private as soon as possible */ @@ -157,11 +158,15 @@ void _f_ptrlist_exclude (FPtrList **list, FPtrList **excludelist, FDetectFunc void _f_ptrlist_remove (FPtrList **list, FPtrListItem *item); FPtrList *f_ptrlist_remove_find_custom (FPtrList *haystack, void *needle, FCompareFunc fn, void **data); +#define f_ptrlist_entry(ptr) f_list_entry (ptr, FPtrListItem, base) +#define f_ptrlist_entry_next(ptr) f_list_entry_next (ptr, FPtrListItem, base) +#define f_ptrlist_entry_previous(ptr) f_list_entry_previous (ptr, FPtrListItem, base) + #define f_foreach(it, list) \ - for (it = f_ptrlist_begin (list); it != f_ptrlist_end (list); it = f_ptrlistitem_next (it)) + for (it = f_ptrlist_begin (list); it != f_ptrlist_end (list); it = f_ptrlist_entry_next (it)) #define f_rforeach(it, list) \ - for (it = f_ptrlist_rbegin (list); it != f_ptrlist_rend (list); it = f_ptrlistitem_prev (it)) + for (it = f_ptrlist_rbegin (list); it != f_ptrlist_rend (list); it = f_ptrlist_entry_previous (it)) #endif /* F_LIST_H */ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
