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