[GRASS-SVN] r54831 - grass/trunk/lib/stats

svn_grass at osgeo.org svn_grass at osgeo.org
Fri Feb 1 10:46:04 PST 2013


Author: mmetz
Date: 2013-02-01 10:46:04 -0800 (Fri, 01 Feb 2013)
New Revision: 54831

Modified:
   grass/trunk/lib/stats/sort_cell.c
Log:
statslib: do not qsort NULL values

Modified: grass/trunk/lib/stats/sort_cell.c
===================================================================
--- grass/trunk/lib/stats/sort_cell.c	2013-02-01 16:10:11 UTC (rev 54830)
+++ grass/trunk/lib/stats/sort_cell.c	2013-02-01 18:46:04 UTC (rev 54831)
@@ -8,6 +8,11 @@
 {
     const DCELL *a = aa, *b = bb;
 
+    if (*a < *b)
+	return -1;
+    return (*a > *b);
+
+
     if (Rast_is_d_null_value((DCELL *) a) && Rast_is_d_null_value((DCELL *) b))
 	return 0;
 
@@ -22,26 +27,40 @@
 
 int sort_cell(DCELL * array, int n)
 {
-    int i;
+    int i, j;
 
-    qsort(array, n, sizeof(DCELL), ascending);
+    j = 0;
+    for (i = 0; i < n; i++) {
+	if (!Rast_is_d_null_value(&array[i])) {
+	    array[j] = array[i];
+	    j++;
+	}
+    }
+    n = j;
 
-    for (i = 0; i < n; i++)
-	if (Rast_is_d_null_value(&array[i]))
-	    break;
+    if (n > 0)
+	qsort(array, n, sizeof(DCELL), ascending);
 
-    return i;
+    return n;
 }
 
 int sort_cell_w(DCELL(*array)[2], int n)
 {
-    int i;
+    int i, j;
 
-    qsort(array, n, 2 * sizeof(DCELL), ascending);
+    j = 0;
+    for (i = 0; i < n; i++) {
+	if (!Rast_is_d_null_value(&array[i][0]) &&
+	    !Rast_is_d_null_value(&array[i][1])) {
+	    array[j][0] = array[i][0];
+	    array[j][1] = array[i][1];
+	    j++;
+	}
+    }
+    n = j;
 
-    for (i = 0; i < n; i++)
-	if (Rast_is_d_null_value(&array[i][0]))
-	    break;
+    if (n > 0)
+	qsort(array, n, 2 * sizeof(DCELL), ascending);
 
-    return i;
+    return n;
 }



More information about the grass-commit mailing list