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

Reply via email to