From 50c4c4b9ce488f2c7691ea26bf670b0abfc797cd Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Sun, 29 Mar 2009 14:10:09 +0200 Subject: change Hills::sort() interface --- src/Hill.cxx | 62 +++++++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 30 deletions(-) (limited to 'src/Hill.cxx') diff --git a/src/Hill.cxx b/src/Hill.cxx index 9056d2f..d79f4ad 100644 --- a/src/Hill.cxx +++ b/src/Hill.cxx @@ -128,7 +128,7 @@ void Hills::mark_duplicates(double dist) { Hill *m, *n; int i, j; - sort_phi(); + sort(SORT_PHI); for(i=0; iy + m2->label_y) - (m1->y + m1->label_y); - else + if (m1 && m2) { + if ((m2->y + m2->label_y) > (m1->y + m1->label_y)) + return 1; + else if ((m2->y + m2->label_y) < (m1->y + m1->label_y)) + return -1; + else + return 0; + } else { return 0; + } } void -Hills::sort() { - if (!m) - return; - - qsort(m, num, sizeof(Hill *), comp_mountains); -} - -void -Hills::sort_phi() { - if (!m) - return; - - qsort(m, num, sizeof(Hill *), comp_mountains_phi); -} - -void -Hills::sort_name() { +Hills::sort(SortType t) { + int (*cmp)(const void *, const void *); + if (!m) return; - qsort(m, num, sizeof(Hill *), comp_mountains_name); -} - -void -Hills::sort_label_y() { - if (!m) - return; + switch (t) { + case SORT_ALPHA: + cmp = comp_mountains_alpha; + break; + case SORT_PHI: + cmp = comp_mountains_phi; + break; + case SORT_NAME: + cmp = comp_mountains_name; + break; + case SORT_LABEL_Y: + cmp = comp_mountains_label_y; + break; + default: + fprintf(stderr, "ERROR: Unknown sort type %d\n", t); + return; + } - qsort(m, num, sizeof(Hill *), comp_mountains_label_y); + qsort(m, num, sizeof(Hill *), cmp); } void -- cgit v1.2.3