Enlightenment CVS committal

Author  : moom
Project : e17
Module  : libs/etk

Dir     : e17/libs/etk/src/lib


Modified Files:
        etk_tree.c etk_tree.h 


Log Message:
* [Tree] Cleanup and doc++


===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.c,v
retrieving revision 1.94
retrieving revision 1.95
diff -u -3 -r1.94 -r1.95
--- etk_tree.c  4 Apr 2007 19:57:32 -0000       1.94
+++ etk_tree.c  10 Apr 2007 21:26:48 -0000      1.95
@@ -137,6 +137,7 @@
 static void _etk_tree_expanders_clip(Etk_Tree *tree);
 
 static void _etk_tree_row_select(Etk_Tree *tree, Etk_Tree_Row *row, 
Etk_Modifiers modifiers);
+static void _etk_tree_heapify(Etk_Tree *tree, Etk_Tree_Row **heap, int root, 
int size, int (*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row 
*row2, void *data), int asc, Etk_Tree_Col *col, void *data);
 
 
 static Etk_Signal *_etk_tree_signals[ETK_TREE_NUM_SIGNALS];
@@ -826,43 +827,30 @@
    col->sort.data = data;
 }
 
-/* TODOC */
-void etk_tree_col_sort(Etk_Tree_Col *col, Etk_Bool ascendant)
+/**
+ * @brief Sorts the rows of the tree according to the comparison function of 
the given column. You can set the
+ * comparison function with etk_tree_col_sort_set(). If no comparison function 
is associated to the column, this
+ * function will have no effect
+ * @param col the column according to which the tree's rows should be sorted
+ * @param ascending Etk_True to perform an ascendant sort, ETK_FALSE to 
perform a descendant sort
+ */
+void etk_tree_col_sort(Etk_Tree_Col *col, Etk_Bool ascending)
 {
    if (!col)
       return;
-   etk_tree_col_sort_full(col, col->sort.compare_cb, col->sort.data, 
ascendant);
+   etk_tree_col_sort_full(col, col->sort.compare_cb, col->sort.data, 
ascending);
 }
 
-/* Restore the "heap" property of the heap. Used to sort the tree */
-static void _etk_tree_heapify(Etk_Tree *tree, Etk_Tree_Row **heap, int root, 
int size, int (*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row 
*row2, void *data), int asc, Etk_Tree_Col *col, void *data)
-{
-   Etk_Tree_Row *tmp;
-   int left, right, max;
-   
-   if (!heap)
-      return;
-   
-   left = (root * 2) + 1;
-   right = (root * 2) + 2;
-   
-   max = root;
-   if (left < size && (compare_cb(col, heap[left], heap[max], data) * asc) > 0)
-      max = left;
-   if (right < size && (compare_cb(col, heap[right], heap[max], data) * asc) > 
0)
-      max = right;
-   
-   if (max != root)
-   {
-      tmp = heap[max];
-      heap[max] = heap[root];
-      heap[root] = tmp;
-      _etk_tree_heapify(tree, heap, max, size, compare_cb, asc, col, data);
-   }
-}
-
-/* TODOC */
-void etk_tree_col_sort_full(Etk_Tree_Col *col, int (*compare_cb)(Etk_Tree_Col 
*col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void *data), void *data, Etk_Bool 
ascendant)
+/**
+ * @brief Sorts the rows of the tree according to the given comparison function
+ * @param col the column that will be passed to @a compare_cb when it is called
+ * @param compare_cb the function to call to compare two rows. It should 
return a negative
+ * value if the cell of "row1" has a lower value than the cell of "row2", 0 if 
they have the
+ * same value, and a positive value if the cell of "row2" has a greater value 
than the cell of "row1"
+ * @param data a pointer that will be passed to @a compare_cb when it is called
+ * @param ascending Etk_True to perform an ascendant sort, ETK_FALSE to 
perform a descendant sort
+ */
+void etk_tree_col_sort_full(Etk_Tree_Col *col, int (*compare_cb)(Etk_Tree_Col 
*col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void *data), void *data, Etk_Bool 
ascending)
 {
    Etk_Tree *tree;
    Etk_Tree_Row *first_row, *r;
@@ -876,7 +864,7 @@
    if (!(first_row = tree->root.first_child))
       return;
    
-   asc = ascendant ? -1 : 1;
+   asc = ascending ? -1 : 1;
    num_rows = tree->root.num_children;
    heap = malloc(num_rows * sizeof(Etk_Tree_Row *));
    
@@ -918,10 +906,6 @@
    tree->root.last_child = r;
    free(heap);
    
-   /* TODO: */
-   /*tree->last_sorted_col = col;
-   tree->last_sorted_ascendant = ascendant;*/
-   
    etk_widget_redraw_queue(ETK_WIDGET(tree));
 }
 
@@ -3576,6 +3560,33 @@
    
    if (!row->tree->frozen)
       etk_widget_redraw_queue(ETK_WIDGET(row->tree));
+}
+
+/* Restore the heap-property of the heap. Used to sort the tree */
+static void _etk_tree_heapify(Etk_Tree *tree, Etk_Tree_Row **heap, int root, 
int size, int (*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row 
*row2, void *data), int asc, Etk_Tree_Col *col, void *data)
+{
+   Etk_Tree_Row *tmp;
+   int left, right, max;
+   
+   if (!heap)
+      return;
+   
+   left = (root * 2) + 1;
+   right = (root * 2) + 2;
+   
+   max = root;
+   if (left < size && (compare_cb(col, heap[left], heap[max], data) * asc) > 0)
+      max = left;
+   if (right < size && (compare_cb(col, heap[right], heap[max], data) * asc) > 
0)
+      max = right;
+   
+   if (max != root)
+   {
+      tmp = heap[max];
+      heap[max] = heap[root];
+      heap[root] = tmp;
+      _etk_tree_heapify(tree, heap, max, size, compare_cb, asc, col, data);
+   }
 }
 
 /** @} */
===================================================================
RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree.h,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -3 -r1.32 -r1.33
--- etk_tree.h  2 Apr 2007 22:11:53 -0000       1.32
+++ etk_tree.h  10 Apr 2007 21:26:48 -0000      1.33
@@ -192,8 +192,8 @@
 void           etk_tree_col_position_set(Etk_Tree_Col *col, int position);
 int            etk_tree_col_position_get(Etk_Tree_Col *col);
 void           etk_tree_col_sort_set(Etk_Tree_Col *col, int 
(*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void 
*data), void *data);
-void           etk_tree_col_sort(Etk_Tree_Col *col, Etk_Bool ascendant);
-void           etk_tree_col_sort_full(Etk_Tree_Col *col, int 
(*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void 
*data), void *data, Etk_Bool ascendant);
+void           etk_tree_col_sort(Etk_Tree_Col *col, Etk_Bool ascending);
+void           etk_tree_col_sort_full(Etk_Tree_Col *col, int 
(*compare_cb)(Etk_Tree_Col *col, Etk_Tree_Row *row1, Etk_Tree_Row *row2, void 
*data), void *data, Etk_Bool ascending);
 
 Etk_Tree_Row  *etk_tree_row_prepend(Etk_Tree *tree, Etk_Tree_Row *parent, ...);
 Etk_Tree_Row  *etk_tree_row_append(Etk_Tree *tree, Etk_Tree_Row *parent, ...);



-------------------------------------------------------------------------
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