Git-Url: 
http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=0529a2543c199a50e4dc1a33a7a4afa5c7fdc603

commit 0529a2543c199a50e4dc1a33a7a4afa5c7fdc603
Author: Michel Hermier <[email protected]>
Date:   Mon May 13 12:58:44 2013 +0200

libflib: Use FListAccumulator in FList implementation.

diff --git a/lib/libflib/flist.c b/lib/libflib/flist.c
index c3730dc..3d1c818 100644
--- a/lib/libflib/flist.c
+++ b/lib/libflib/flist.c
@@ -26,6 +26,7 @@

#include "flist.h"

+#include "flistaccumulator.h"
#include "fstdlib.h"

static
@@ -33,11 +34,6 @@ void *f_ptrcpy(const void *p) {
return (void *)p;
}

-static
-void f_listaccumulator (void *data, FList **list) {
-       *list = f_list_append (*list, data);
-}
-
FList *f_list_new () {
return NULL;
}
@@ -193,12 +189,13 @@ FList *f_list_copy (FList *list) {
}

FList *f_list_deep_copy (FList *list, FCopyFunc fn, void *user_data) {
-       FList *newlist = NULL;
+       FListAccumulator listaccumulator;

+       f_listaccumulator_init (&listaccumulator);
for (; list; list = list->next) {
-               newlist = f_list_append (newlist, fn (list->data, user_data));
+               f_listaccumulator (fn (list->data, user_data), 
&listaccumulator);
}
-       return newlist;
+       return f_listaccumulator_fini (&listaccumulator);
}

void f_list_detach (FList *list, FCopyFunc fn, void *user_data) {
@@ -221,13 +218,14 @@ FList *f_list_detect_next (FList *list, FDetectFunc fn, 
void *user_data) {
}

FList *f_list_filter (FList *list, FDetectFunc dfn, void *user_data) {
-       FList *ret = NULL;
+       FListAccumulator listaccumulator;

+       f_listaccumulator_init (&listaccumulator);
for (list = f_list_detect (list, dfn, user_data); list != NULL;
list = f_list_detect_next (list, dfn, user_data)) {
-               f_listaccumulator (list->data, &ret);
+               f_listaccumulator (list->data, &listaccumulator);
}
-       return ret;
+       return f_listaccumulator_fini (&listaccumulator);
}

FList *f_list_find (FList *list, const void *data) {
@@ -261,10 +259,11 @@ void f_list_foreach_filtered (FList *list, FVisitorFunc 
fn, FDetectFunc dfn, voi
* The caller is responsible for freeing the old list
*/
FList *f_list_reverse (FList *list) {
-       FList *ret = NULL;
+       FListAccumulator listaccumulator;

-       f_list_reverse_foreach (list, (FVisitorFunc)f_listaccumulator, &ret);
-       return ret;
+       f_listaccumulator_init (&listaccumulator);
+       f_list_foreach (list, (FVisitorFunc)f_listreverseaccumulator, 
&listaccumulator);
+       return f_listaccumulator_fini (&listaccumulator);
}

void f_list_reverse_foreach (FList *list, FVisitorFunc fn, void *user_data) {
@@ -275,14 +274,15 @@ void f_list_reverse_foreach (FList *list, FVisitorFunc 
fn, void *user_data) {
}

FList *f_list_uniques (FList *list, FCompareFunc fn, void *user_data) {
-       FList *ret = NULL;
+       FListAccumulator listaccumulator;

+       f_listaccumulator_init (&listaccumulator);
for (; list != NULL; list = list->next) {
-               if (f_list_find_custom (ret, list->data, fn, user_data) == 
NULL) {
-                       f_listaccumulator (list->data, &ret);
+               if (f_list_find_custom (listaccumulator.head, list->data, fn, 
user_data) == NULL) {
+                       f_listaccumulator (list->data, &listaccumulator);
}
}
-       return ret;
+       return f_listaccumulator_fini (&listaccumulator);
}

/* Add items to a list in sorted order. Use the given comparison function to
_______________________________________________
Frugalware-git mailing list
[email protected]
http://frugalware.org/mailman/listinfo/frugalware-git

Reply via email to