Author: jbevain
Date: 2007-09-04 14:59:31 -0400 (Tue, 04 Sep 2007)
New Revision: 85315

Modified:
   trunk/moon/src/ChangeLog
   trunk/moon/src/list.cpp
   trunk/moon/src/list.h
Log:
2007-09-04  Jb Evain  <[EMAIL PROTECTED]>

        * list.h, list.cpp: add a List::ForEach method.


Modified: trunk/moon/src/ChangeLog
===================================================================
--- trunk/moon/src/ChangeLog    2007-09-04 18:48:11 UTC (rev 85314)
+++ trunk/moon/src/ChangeLog    2007-09-04 18:59:31 UTC (rev 85315)
@@ -1,3 +1,7 @@
+2007-09-04  Jb Evain  <[EMAIL PROTECTED]>
+
+       * list.h, list.cpp: add a List::ForEach method.
+
 2007-09-04  Jeffrey Stedfast  <[EMAIL PROTECTED]>
 
        * brush.cpp (image_brush_create_pattern): Set CAIRO_FILTER_FAST

Modified: trunk/moon/src/list.cpp
===================================================================
--- trunk/moon/src/list.cpp     2007-09-04 18:48:11 UTC (rev 85314)
+++ trunk/moon/src/list.cpp     2007-09-04 18:59:31 UTC (rev 85315)
@@ -189,7 +189,7 @@
 }
 
 List::Node *
-List::Find (NodeFinder find, void *data)
+List::Find (NodeAction find, void *data)
 {
        List::Node *n = head;
        
@@ -208,7 +208,7 @@
 
 
 void
-List::Remove (NodeFinder find, void *data)
+List::Remove (NodeAction find, void *data)
 {
        List::Node *n;
        
@@ -273,7 +273,7 @@
 
 
 int
-List::IndexOf (NodeFinder find, void *data)
+List::IndexOf (NodeAction find, void *data)
 {
        List::Node *n = head;
        int i = 0;
@@ -292,8 +292,23 @@
        return -1;
 }
 
+void
+List::ForEach (NodeAction action, void *data)
+{
+       List::Node *node = head;
+       bool move = true;
 
+       if (!action)
+               return;
 
+       while (node && move) {
+               if (!action (node, data))
+                       move = false;
+               else
+                       node = node->next;
+       }
+}
+
 //#define TEST_PROGRAM
 #ifdef TEST_PROGRAM
 

Modified: trunk/moon/src/list.h
===================================================================
--- trunk/moon/src/list.h       2007-09-04 18:48:11 UTC (rev 85314)
+++ trunk/moon/src/list.h       2007-09-04 18:59:31 UTC (rev 85315)
@@ -25,7 +25,7 @@
                virtual ~Node () { }
        };
        
-       typedef bool (* NodeFinder) (Node *node, void *data);
+       typedef bool (* NodeAction) (Node *node, void *data);
        
 protected:
        Node *head;
@@ -50,14 +50,16 @@
        
        Node *Replace (Node *node, int index);
        
-       Node *Find (NodeFinder find, void *data);
-       void Remove (NodeFinder find, void *data);
+       Node *Find (NodeAction find, void *data);
+       void Remove (NodeAction find, void *data);
        void Unlink (Node *node);
        
        Node *Index (int index);
        
        int IndexOf (Node *node);
-       int IndexOf (NodeFinder find, void *data);
+       int IndexOf (NodeAction find, void *data);
+
+       void ForEach (NodeAction action, void *data);
 };
 
 #endif /* __LIST_H__ */

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to