瀏覽代碼

diglib: resolve ties for dig_cidx_sort()

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@55759 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 12 年之前
父節點
當前提交
0c78d5025f
共有 1 個文件被更改,包括 10 次插入2 次删除
  1. 10 2
      lib/vector/diglib/cindex.c

+ 10 - 2
lib/vector/diglib/cindex.c

@@ -135,7 +135,7 @@ dig_cidx_add_cat(struct Plus_head *Plus, int field, int cat, int line,
     return 1;
 }
 
-/* Compare by cat */
+/* Compare by cat, resolve ties by type, resolve ties by id */
 static int cmp_cat(const void *pa, const void *pb)
 {
     int *p1 = (int *)pa;
@@ -145,6 +145,14 @@ static int cmp_cat(const void *pa, const void *pb)
 	return -1;
     if (p1[0] > p2[0])
 	return 1;
+    if (p1[1] < p2[1])
+	return -1;
+    if (p1[1] > p2[1])
+	return 1;
+    if (p1[2] < p2[2])
+	return -1;
+    if (p1[2] > p2[2])
+	return 1;
     return 0;
 }
 
@@ -334,7 +342,7 @@ void dig_cidx_sort(struct Plus_head *Plus)
 
 	ci = &(Plus->cidx[f]);
 
-	/* Sort by category */
+	/* Sort by 1. category, 2. type, 3. line id */
 	qsort(ci->cat, ci->n_cats, 3 * sizeof(int), cmp_cat);
 
 	/* Calculate number of unique cats */