Changeset: 5aa6c5cc9702 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5aa6c5cc9702
Modified Files:
gdk/gdk_ssort_impl.h
Branch: default
Log Message:
Fix compilation.
Why didn't gcc on Fedora 16 find these?
diffs (161 lines):
diff --git a/gdk/gdk_ssort_impl.h b/gdk/gdk_ssort_impl.h
--- a/gdk/gdk_ssort_impl.h
+++ b/gdk/gdk_ssort_impl.h
@@ -21,14 +21,28 @@
* to be defined by the including file, and we expect that the
* combination (T,O) is unique to each inclusion. */
-#define binarysort(a,b) binarysort_##a##b
-#define COPY(a) COPY_##a
-#define ISLT(a,b) ISLT_##a##b
-#define gallop_left(a,b) gallop_left_##a##b
-#define gallop_right(a,b) gallop_right_##a##b
-#define merge_at(a,b) merge_at_##a##b
-#define do_ssort(a,b) do_ssort_##a##b
-#define GDKssortimpl(b) GDKssort##b
+/* concatenate two or three tokens */
+#define CONCAT2(a,b) a##b
+#define CONCAT3(a,b,c) a##b##c
+
+/* these tokens get redefined in each inclusion */
+#undef binarysort
+#undef ISLT
+#undef COPY
+#undef gallop_left
+#undef gallop_right
+#undef merge_at
+#undef do_ssort
+#undef GDKssortimpl
+
+#define binarysort(a,b) CONCAT3(binarysort_,a,b)
+#define COPY(a) CONCAT2(COPY_,a)
+#define ISLT(a,b) CONCAT3(ISLT_,a,b)
+#define gallop_left(a,b) CONCAT3(gallop_left_,a,b)
+#define gallop_right(a,b) CONCAT3(gallop_right_,a,b)
+#define merge_at(a,b) CONCAT3(merge_at_,a,b)
+#define do_ssort(a,b) CONCAT3(do_ssort_,a,b)
+#define GDKssortimpl(b) CONCAT2(GDKssort,b)
/* binarysort is the best method for sorting small arrays: it does few
* compares, but can do data movement quadratic in the number of
@@ -709,19 +723,20 @@ do_ssort(T,O)(MergeState *ms, ssize_t nr
n = 1;
} else {
n = 2;
- if (ISLT(T,O)(PTRADD(ms.bh, nlo, ms.hs),
- PTRADD(ms.bh, olo, ms.hs), &ms)) {
+ if (ISLT(T,O)(PTRADD(ms->bh, nlo, ms->hs),
+ PTRADD(ms->bh, olo, ms->hs),
+ ms)) {
descending = 1;
for (olo = nlo++;
nlo < hi;
olo = nlo++, ++n) {
- if (!ISLT(T,O)(PTRADD(ms.bh,
+ if (!ISLT(T,O)(PTRADD(ms->bh,
nlo,
- ms.hs),
- PTRADD(ms.bh,
+ ms->hs),
+ PTRADD(ms->bh,
olo,
- ms.hs),
- &ms))
+ ms->hs),
+ ms))
break;
}
}
@@ -729,32 +744,32 @@ do_ssort(T,O)(MergeState *ms, ssize_t nr
for (olo = nlo++;
nlo < hi;
olo = nlo++, ++n) {
- if (ISLT(T,O)(PTRADD(ms.bh,
+ if (ISLT(T,O)(PTRADD(ms->bh,
nlo,
- ms.hs),
- PTRADD(ms.bh,
+ ms->hs),
+ PTRADD(ms->bh,
olo,
- ms.hs),
- &ms))
+ ms->hs),
+ ms))
break;
}
}
}
}
if (descending)
- reverse_slice(lo, lo + n, &ms);
+ reverse_slice(lo, lo + n, ms);
/* If short, extend to min(minrun, nremaining). */
if (n < minrun) {
ssize_t force = nremaining <= minrun ? nremaining :
minrun;
- binarysort(T,O)(lo, lo + force, lo + n, &ms);
+ binarysort(T,O)(lo, lo + force, lo + n, ms);
n = force;
}
/* Push run onto pending-runs stack, and maybe merge. */
- assert(ms.n < MAX_MERGE_PENDING);
- ms.pending[ms.n].base = lo;
- ms.pending[ms.n].len = n;
- ms.n++;
+ assert(ms->n < MAX_MERGE_PENDING);
+ ms->pending[ms->n].base = lo;
+ ms->pending[ms->n].len = n;
+ ms->n++;
{
/* Examine the stack of runs waiting to be merged, merging adjacent
* runs until the stack invariants are re-established:
@@ -765,19 +780,19 @@ do_ssort(T,O)(MergeState *ms, ssize_t nr
* See listsort.txt for more info.
*
* Returns 0 on success, -1 on error. */
- struct slice *p = ms.pending;
+ struct slice *p = ms->pending;
- while (ms.n > 1) {
- ssize_t i = ms.n - 2;
+ while (ms->n > 1) {
+ ssize_t i = ms->n - 2;
if (i > 0 &&
p[i - 1].len <= p[i].len + p[i + 1].len) {
if (p[i - 1].len < p[i + 1].len)
--i;
- if (merge_at(T,O)(&ms, i) < 0)
+ if (merge_at(T,O)(ms, i) < 0)
return -1;
} else if (p[i].len <= p[i + 1].len) {
- if (merge_at(T,O)(&ms, i) < 0)
+ if (merge_at(T,O)(ms, i) < 0)
return -1;
} else
break;
@@ -794,14 +809,14 @@ do_ssort(T,O)(MergeState *ms, ssize_t nr
* one remains. This is used at the end of the mergesort.
*
* Returns 0 on success, -1 on error. */
- struct slice *p = ms.pending;
+ struct slice *p = ms->pending;
- while (ms.n > 1) {
- ssize_t n = ms.n - 2;
+ while (ms->n > 1) {
+ ssize_t n = ms->n - 2;
if (n > 0 && p[n - 1].len < p[n + 1].len)
--n;
- if (merge_at(T,O)(&ms, n) < 0)
+ if (merge_at(T,O)(ms, n) < 0)
return -1;
}
}
@@ -916,3 +931,4 @@ GDKssortimpl(O)(void *h, void *t, void *
merge_freemem(&ms);
return result;
}
+#endif /* DEFINE_MAIN_FUNC */
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list