diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-03-29 14:10:09 +0200 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2009-03-29 14:10:09 +0200 |
commit | 50c4c4b9ce488f2c7691ea26bf670b0abfc797cd (patch) | |
tree | e0fa3d1cbdee56225514de49139e073d48a555b6 | |
parent | d2eca5bbe81dc4a899c97f1423c392554113f852 (diff) |
change Hills::sort() interface
-rw-r--r-- | src/GipfelWidget.cxx | 2 | ||||
-rw-r--r-- | src/Hill.H | 6 | ||||
-rw-r--r-- | src/Hill.cxx | 62 | ||||
-rw-r--r-- | src/Panorama.cxx | 2 | ||||
-rw-r--r-- | src/choose_hill.cxx | 2 |
5 files changed, 37 insertions, 37 deletions
diff --git a/src/GipfelWidget.cxx b/src/GipfelWidget.cxx index f0403cf..e334484 100644 --- a/src/GipfelWidget.cxx +++ b/src/GipfelWidget.cxx @@ -369,7 +369,7 @@ GipfelWidget::set_labels(Hills *v) { colliding.add(n); } - colliding.sort_label_y(); + colliding.sort(Hills::SORT_LABEL_Y); for (int j = 0; j < colliding.get_num(); j++) { Hill *n = colliding.get(j); @@ -42,6 +42,7 @@ class Hills { public: typedef enum { + SORT_ALPHA, SORT_PHI, SORT_NAME, SORT_LABEL_Y @@ -56,10 +57,7 @@ class Hills { void add(Hill *m); void remove(const Hill *m); void add(Hills *h); - void sort_phi(); - void sort_name(); - void sort_label_y(); - void sort(); + void sort(SortType t); void clear(); void clobber(); int contains(const Hill *m) const; 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; i<get_num();i++) { m = get(i); @@ -175,7 +175,7 @@ Hills::add(Hills *h) { } static int -comp_mountains(const void *n1, const void *n2) { +comp_mountains_alpha(const void *n1, const void *n2) { Hill *m1 = *(Hill **)n1; Hill *m2 = *(Hill **)n2; @@ -230,42 +230,44 @@ comp_mountains_label_y(const void *n1, const void *n2) { Hill *m1 = *(Hill **)n1; Hill *m2 = *(Hill **)n2; - if (m1 && m2) - return (m2->y + 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 diff --git a/src/Panorama.cxx b/src/Panorama.cxx index e52b55c..7c4124f 100644 --- a/src/Panorama.cxx +++ b/src/Panorama.cxx @@ -297,7 +297,7 @@ Panorama::update_angles() { m->alph = alpha(m); } - mountains->sort(); + mountains->sort(Hills::SORT_ALPHA); update_close_mountains(); } diff --git a/src/choose_hill.cxx b/src/choose_hill.cxx index 7f59d68..c83d8b1 100644 --- a/src/choose_hill.cxx +++ b/src/choose_hill.cxx @@ -15,7 +15,7 @@ choose_hill(const Hills *hills, const char *l) { Hills *h_sort = new Hills(hills); Hill *ret; - h_sort->sort_name(); + h_sort->sort(Hills::SORT_NAME); for (int i=0; i<h_sort->get_num(); i++) { char buf[256]; |