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

Reply via email to