[GRASS-SVN] r47354 - grass/trunk/lib/vector/diglib

svn_grass at osgeo.org svn_grass at osgeo.org
Tue Aug 2 08:40:27 EDT 2011


Author: mmetz
Date: 2011-08-02 05:40:27 -0700 (Tue, 02 Aug 2011)
New Revision: 47354

Modified:
   grass/trunk/lib/vector/diglib/cindex.c
Log:
faster insertion

Modified: grass/trunk/lib/vector/diglib/cindex.c
===================================================================
--- grass/trunk/lib/vector/diglib/cindex.c	2011-08-02 12:38:26 UTC (rev 47353)
+++ grass/trunk/lib/vector/diglib/cindex.c	2011-08-02 12:40:27 UTC (rev 47354)
@@ -208,22 +208,19 @@
 	ci->cat = G_realloc(ci->cat, ci->a_cats * 3 * sizeof(int));
     }
 
-    /* Find position */
-    for (position = 0; position < ci->n_cats; position++) {
-	if (ci->cat[position][0] >= cat) {
-	    break;
+    /* Find position and move on the way */
+    for (position = ci->n_cats; position > 0; position--) {
+	if (ci->cat[position - 1][0] < cat ||
+	   (ci->cat[position - 1][0] == cat && ci->cat[position - 1][1] <= type)) {
+	       break;
 	}
+	ci->cat[position][0] = ci->cat[position - 1][0];
+	ci->cat[position][1] = ci->cat[position - 1][1];
+	ci->cat[position][2] = ci->cat[position - 1][2];
     }
 
     G_debug(4, "position = %d", position);
 
-    /* Move */
-    for (i = ci->n_cats; i > position; i--) {
-	ci->cat[i][0] = ci->cat[i - 1][0];
-	ci->cat[i][1] = ci->cat[i - 1][1];
-	ci->cat[i][2] = ci->cat[i - 1][2];
-    }
-
     ci->cat[position][0] = cat;
     ci->cat[position][1] = type;
     ci->cat[position][2] = line;



More information about the grass-commit mailing list