summaryrefslogtreecommitdiff
path: root/src/Hill.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'src/Hill.cxx')
-rw-r--r--src/Hill.cxx62
1 files changed, 32 insertions, 30 deletions
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