Stop recursing when the indices are exactly the same

This commit is contained in:
Eric Fischer
2016-04-01 17:41:53 -07:00
parent cf806baca2
commit 55f93963be
+13 -8
View File
@@ -1106,6 +1106,8 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split
int indexfds[splits]; int indexfds[splits];
long long geompos[splits]; long long geompos[splits];
fprintf(stderr, "prefix %d, splits %d, splitbits %d\n", prefix, splits, splitbits);
int i; int i;
for (i = 0; i < splits; i++) { for (i = 0; i < splits; i++) {
geompos[i] = 0; geompos[i] = 0;
@@ -1239,16 +1241,19 @@ void radix1(int *geomfds_in, int *indexfds_in, int inputs, int prefix, int split
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if (indexst.st_size == sizeof(struct index)) { if (indexst.st_size == sizeof(struct index) || prefix + splitbits >= 64) {
struct index ix = *indexmap; long long a;
long long pos = *geompos; for (a = 0; a < indexst.st_size / sizeof(struct index); a++) {
struct index ix = indexmap[a];
long long pos = *geompos;
fwrite_check(geommap + ix.start, ix.end - ix.start, 1, geomfile, "geom"); fwrite_check(geommap + ix.start, ix.end - ix.start, 1, geomfile, "geom");
*geompos += ix.end - ix.start; *geompos += ix.end - ix.start;
ix.start = pos; ix.start = pos;
ix.end = *geompos; ix.end = *geompos;
fwrite_check(&ix, sizeof(struct index), 1, indexfile, "index"); fwrite_check(&ix, sizeof(struct index), 1, indexfile, "index");
}
} else { } else {
radix1(&geomfds[i], &indexfds[i], 1, prefix + splitbits, availfiles / 4, mem, tmpdir, availfiles, geomfile, indexfile, geompos_out); radix1(&geomfds[i], &indexfds[i], 1, prefix + splitbits, availfiles / 4, mem, tmpdir, availfiles, geomfile, indexfile, geompos_out);
already_closed = 1; already_closed = 1;