Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/data


Modified Files:
        evas_list.c 


Log Message:


fix list bug...

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/data/evas_list.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- evas_list.c 25 Feb 2005 15:31:52 -0000      1.12
+++ evas_list.c 21 Apr 2005 08:28:21 -0000      1.13
@@ -772,44 +772,51 @@
 static Evas_List *
 evas_list_combine(Evas_List *l, Evas_List *ll, int (*func)(void *, void*))
 {
-    Evas_List *result = NULL;
-    Evas_List *l_head = NULL, *ll_head = NULL;
-
-    l_head = l;
-    ll_head = ll;
-    while(l && ll)
-    {
-       switch(func(l->data, ll->data))
-           {
-               case -1:
-                   result = evas_list_append(result, l->data);
-                   l = evas_list_next(l);
-                   break;
-               case 0:
-                   result = evas_list_append(result, l->data);
-                   l = evas_list_next(l);
-                   result = evas_list_append(result, ll->data);
-                   ll = evas_list_next(ll);
-                   break;
-               case 1:
-                   result = evas_list_append(result, ll->data);
-                   ll = evas_list_next(ll);
-                   break;
-           }
-    }
-    while(l)
-    {
+   Evas_List *result = NULL;
+   Evas_List *l_head = NULL, *ll_head = NULL;
+   
+   l_head = l;
+   ll_head = ll;
+   while (l && ll)
+     {
+       int cmp;
+       
+       cmp = func(l->data, ll->data);
+       if (cmp < 0)
+         {
+            result = evas_list_append(result, l->data);
+            l = evas_list_next(l);
+         }
+       else if (cmp == 0)
+         {
+            result = evas_list_append(result, l->data);
+            l = evas_list_next(l);
+            result = evas_list_append(result, ll->data);
+            ll = evas_list_next(ll);
+         }
+       else if (cmp > 0)
+         {
+            result = evas_list_append(result, ll->data);
+            ll = evas_list_next(ll);
+         }
+       else
+         {
+            l = ll = NULL;
+         }
+     }
+   while (l)
+     {
        result = evas_list_append(result, l->data);
        l = evas_list_next(l);
-    }
-    evas_list_free(l_head);
-    while(ll)
-    {
+     }
+   evas_list_free(l_head);
+   while (ll)
+     {
        result = evas_list_append(result, ll->data);
        ll = evas_list_next(ll);
-    }
-    evas_list_free(ll_head);
-    return(result);
+     }
+   evas_list_free(ll_head);
+   return (result);
 }
 
 /**
@@ -853,38 +860,38 @@
 Evas_List *
 evas_list_sort(Evas_List *list, int size, int (*func)(void *, void *))
 {
-    Evas_List *l = NULL, *ll = NULL;
-    int mid;
-
-    if (!list || !func)
-      return NULL;
-
-    /* if the caller specified an invalid size, sort the whole list */
-    if (size <= 0 || size > list->count)
-      size = list->count;
-
-    mid = size / 2;
-    if (mid < 1)
-      return list;
-
-    /* bleh evas list splicing */
-    ll = evas_list_nth_list(list, mid);
-    if (ll->prev)
-      {
-        list->last = ll->prev;
-        list->count = mid;
-        ll->prev->next = NULL;
-        ll->prev = NULL;
-      }
-
-    ll->count = size - mid;
-
-    /* merge sort */
-    l = evas_list_sort(list, mid, func);
-    ll = evas_list_sort(ll, size - mid, func);
-    list = evas_list_combine(l, ll, func);
-
-    return(list);
+   Evas_List *l = NULL, *ll = NULL;
+   int mid;
+   
+   if (!list || !func)
+     return NULL;
+   
+   /* if the caller specified an invalid size, sort the whole list */
+   if (size <= 0 || size > list->count)
+     size = list->count;
+   
+   mid = size / 2;
+   if (mid < 1)
+     return list;
+   
+   /* bleh evas list splicing */
+   ll = evas_list_nth_list(list, mid);
+   if (ll->prev)
+     {
+       list->last = ll->prev;
+       list->count = mid;
+       ll->prev->next = NULL;
+       ll->prev = NULL;
+     }
+   
+   ll->count = size - mid;
+   
+   /* merge sort */
+   l = evas_list_sort(list, mid, func);
+   ll = evas_list_sort(ll, size - mid, func);
+   list = evas_list_combine(l, ll, func);
+   
+   return(list);
 }
 /**
  * Return the memory allocation failure flag after any operation needin 
allocation




-------------------------------------------------------
This SF.Net email is sponsored by: New Crystal Reports XI.
Version 11 adds new functionality designed to reduce time involved in
creating, integrating, and deploying reporting solutions. Free runtime info,
new features, or free trial, at: http://www.businessobjects.com/devxi/728
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to