Enlightenment CVS committal Author : rephorm Project : e17 Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore Modified Files: Ecore_Data.h ecore_list.c Log Message: add ecore_list_find() to find a data node via a compare callback =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- Ecore_Data.h 5 Nov 2006 16:42:30 -0000 1.24 +++ Ecore_Data.h 28 Dec 2006 03:30:11 -0000 1.25 @@ -113,6 +113,8 @@ /* Traversing the list and returning data */ EAPI void *ecore_list_next(Ecore_List * list); + EAPI void *ecore_list_find(Ecore_List *list, Ecore_Compare_Cb function, + void *user_data); /* Check to see if there is any data in the list */ EAPI int ecore_list_is_empty(Ecore_List * list); =================================================================== RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_list.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- ecore_list.c 25 Jul 2006 12:44:19 -0000 1.24 +++ ecore_list.c 28 Dec 2006 03:30:11 -0000 1.25 @@ -25,6 +25,7 @@ /* Iterative function */ static int _ecore_list_for_each(Ecore_List *list, Ecore_For_Each function, void *user_data); +static void *_ecore_list_find(Ecore_List *list, Ecore_Compare_Cb function, void *user_data); /* Private double linked list functions */ static void *_ecore_dlist_previous(Ecore_DList * list); @@ -1018,6 +1019,35 @@ function(value, user_data); return TRUE; +} + +/** + * Find data in @p list using the compare function @p func + * @param list The list. + * @param function The function to test each node of @p list with + * @param user_data Data to match against (used by @p function) + * @return the first matching data node, or NULL if none match + */ +EAPI void * +ecore_list_find(Ecore_List *list, Ecore_Compare_Cb function, void *user_data) +{ + CHECK_PARAM_POINTER_RETURN("list", list, NULL); + + return _ecore_list_find(list, function, user_data); +} + +/* The real meat of finding a node via a compare cb */ +static void * +_ecore_list_find(Ecore_List *list, Ecore_Compare_Cb function, void *user_data) +{ + void *value; + if (!list || !function) return NULL; + + _ecore_list_goto_first(list); + while ((value = _ecore_list_next(list)) != NULL) + if (!function(value, user_data)) return value; + + return NULL; } /* Initialize a node to starting values */ ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs