Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=30627f71db4064525c306535c71275d782fa5d96
commit 30627f71db4064525c306535c71275d782fa5d96 Author: Michel Hermier <herm...@frugalware.org> Date: Mon May 20 14:05:00 2013 +0200 libpacman: Add FCompareDetector. diff --git a/lib/libflib/fcallbacks.c b/lib/libflib/fcallbacks.c index 6e22d69..07d9ac8 100644 --- a/lib/libflib/fcallbacks.c +++ b/lib/libflib/fcallbacks.c @@ -33,6 +33,10 @@ void f_visit (void *ptr, FVisitor *visitor) { } } +int f_comparedetect (const void *ptr, FCompareDetector *comparedetector) { + return comparedetector->fn (ptr, comparedetector->ptr, comparedetector->user_data); +} + void f_detectvisit (void *ptr, FDetectVisitor *detectvisitor) { if (detectvisitor != NULL) { f_visit (ptr, f_detect (ptr, detectvisitor->detect) == 0 ? diff --git a/lib/libflib/fcallbacks.h b/lib/libflib/fcallbacks.h index 47157a8..41a9bc2 100644 --- a/lib/libflib/fcallbacks.h +++ b/lib/libflib/fcallbacks.h @@ -54,6 +54,16 @@ struct FVisitor { void f_visit (void *ptr, FVisitor *visitor); +typedef struct FCompareDetector FCompareDetector; + +struct FCompareDetector { + FCompareFunc fn; + const void *ptr; + void *user_data; +}; + +int f_comparedetect (const void *ptr, FCompareDetector *comparedetector); + typedef struct FDetectVisitor FDetectVisitor; struct FDetectVisitor { diff --git a/lib/libflib/flist.c b/lib/libflib/flist.c index 936132b..1ace41f 100644 --- a/lib/libflib/flist.c +++ b/lib/libflib/flist.c @@ -307,14 +307,13 @@ FListItem *f_list_find (FList *list, const void *data) { } FListItem *f_list_find_custom (FList *list, const void *data, FCompareFunc cfn, void *user_data) { - FListItem *it = f_list_begin (list), *end = f_list_end (list); + FCompareDetector comparedetector = { + .fn = cfn, + .ptr = data, + .user_data = user_data + }; - for (; it != end; it = it->next) { - if (cfn (it->data, data, user_data) == 0) { - break; - } - } - return it; + return f_list_detect (list, f_comparedetect, &comparedetector); } void f_list_foreach (FList *list, FVisitorFunc fn, void *user_data) { _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git