Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/ecore

Dir     : e17/libs/ecore/src/lib/ecore


Modified Files:
        Ecore_Data.h ecore_sheap.c 


Log Message:


sebastian's fix.

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- Ecore_Data.h        5 Jan 2005 07:20:11 -0000       1.10
+++ Ecore_Data.h        29 Jan 2005 02:13:11 -0000      1.11
@@ -442,12 +442,17 @@
       
       char order, sorted;
       
+      /* Callback for comparing node values, default is direct comparison */
       Ecore_Compare_Cb compare;
+
+      /* Callback for freeing node data, default is NULL */
+      Ecore_Free_Cb free_func;
    };
    
    Ecore_Sheap *ecore_sheap_new(Ecore_Compare_Cb compare, int size);
    void ecore_sheap_destroy(Ecore_Sheap *heap);
    int ecore_sheap_init(Ecore_Sheap *heap, Ecore_Compare_Cb compare, int size);
+   int ecore_sheap_set_free_cb(Ecore_Sheap *heap, Ecore_Free_Cb free_func);
    int ecore_sheap_insert(Ecore_Sheap *heap, void *data);
    void *ecore_sheap_extract(Ecore_Sheap *heap);
    void *ecore_sheap_extreme(Ecore_Sheap *heap);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_sheap.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- ecore_sheap.c       10 Aug 2004 00:30:49 -0000      1.4
+++ ecore_sheap.c       29 Jan 2005 02:13:12 -0000      1.5
@@ -63,17 +63,39 @@
  */
 void ecore_sheap_destroy(Ecore_Sheap *heap)
 {
+       int i;
+
        CHECK_PARAM_POINTER("heap", heap);
 
        /*
-        * FIXME: Need to setup destructor callbacks for this class.
+        * Free data in heap
         */
+       if (heap->free_func)
+               for (i = 0; i < heap->size; i++)
+                       heap->free_func(heap->data[i]);
+
        FREE(heap->data);
 
        FREE(heap);
 }
 
 /**
+ * Set the function for freeing data.
+ * @param  heap      The heap that will use this function when nodes are
+ *                   destroyed.
+ * @param  free_func The function that will free the key data.
+ * @return @c TRUE on successful set, @c FALSE otherwise.
+ */
+int ecore_sheap_set_free_cb(Ecore_Sheap *heap, Ecore_Free_Cb free_func)
+{
+       CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
+
+       heap->free_func = free_func;
+
+       return TRUE;
+}
+
+/**
  * Insert new data into the heap.
  * @param  heap The heap to insert @a data.
  * @param  data The data to add to @a heap.
@@ -215,7 +237,7 @@
 
        CHECK_PARAM_POINTER_RETURN("heap", heap, FALSE);
 
-       for (i = 0; i < heap->size && heap->compare(heap->data[i], item); 
heap++);
+       for (i = 0; i < heap->size && heap->compare(heap->data[i], item); i++);
 
        if (i < heap->size)
                heap->data[i] = newval;




-------------------------------------------------------
This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting
Tool for open source databases. Create drag-&-drop reports. Save time
by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc.
Download a FREE copy at http://www.intelliview.com/go/osdn_nl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to