Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=6002141e6ac73b37c7988c69a2630491172c5905
commit 6002141e6ac73b37c7988c69a2630491172c5905 Author: Michel Hermier <[email protected]> Date: Sun Jun 9 09:17:57 2013 +0200 libflib: Add some private type casting functions to FPtrList(Item). diff --git a/lib/libflib/flist.c b/lib/libflib/flist.c index d26b321..03569b9 100644 --- a/lib/libflib/flist.c +++ b/lib/libflib/flist.c @@ -202,6 +202,14 @@ void *f_ptrcpy(const void *p) { return (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); +} + FPtrListItem *f_ptrlistitem_new (void *data) { FPtrListItem *item = f_zalloc (sizeof(FPtrList)); @@ -232,14 +240,25 @@ void f_ptrlistitem_delete (FPtrListItem *item, FVisitorFunc fn, void *user_data) _f_ptrlistitem_delete (item, &visitor); } -void *f_ptrlistitem_get (FPtrListItem *item) { - return item != NULL ? item->data : NULL; +void *f_ptrlistitem_get (FPtrListItem *ptrlistitem) { + return ptrlistitem != NULL ? ptrlistitem->data : NULL; } -void f_ptrlistitem_set (FPtrListItem *item, void *data) { - if (item) { - item->data = data; - } +void f_ptrlistitem_set (FPtrListItem *ptrlistitem, void *data) { + assert (ptrlistitem != NULL); + + 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) { @@ -266,6 +285,26 @@ void f_ptrlistitem_remove (FPtrListItem *item) { } } +static +FList *f_ptrlist_as_list (FPtrList *ptrlist) { + assert (ptrlist != NULL); + + return &ptrlist->base; +} + +void f_ptrlist_init (FPtrList *ptrlist) { + f_list_init (f_ptrlist_as_list (ptrlist)); +} + +void f_ptrlist_fini (FPtrList *ptrlist, FVisitorFunc fn, void *user_data) { + FVisitor visitor = { + .fn = fn, + .user_data = user_data + }; + + f_list_fini (f_ptrlist_as_list (ptrlist), (FVisitorFunc)f_ptrlistitem_visit, &visitor); +} + FPtrList *f_ptrlist_new () { return NULL; } @@ -279,10 +318,6 @@ void f_ptrlist_delete (FPtrList *list, FVisitorFunc fn, void *user_data) { f_ptrlist_foreach_safe (list, (FVisitorFunc)_f_ptrlistitem_delete, &visitor); } -void f_ptrlist_init (FPtrList *list) { - list->prev = list->next = list; -} - /** * Insert a @list after @item. */ _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
