* void PREFIX_write_merged(struct fastbuf *f, SORT_KEY **keys, void **data, uns n, void *buf)
* takes n records in memory with keys which compare equal and writes
* a single record to the given fastbuf. `buf' points to a buffer which
- * is guaranteed to hold all given records.
+ * is guaranteed to hold the sum of workspace requirements (see below)
+ * over all given records.
* void PREFIX_copy_merged(SORT_KEY **keys, struct fastbuf **data, uns n, struct fastbuf *dest)
* takes n records with keys in memory and data in fastbufs and writes
* a single record.
+ * SORT_UNIFY_WORKSPACE(key) gets a key and returns the amount of workspace required when merging
+ * the given record. Defaults to 0.
*
* Input (choose one of these):
*
* to get successive batches of pre-sorted data.
* The function is passed a page-aligned presorting buffer.
* It returns 1 on success or 0 on EOF.
+ * SORT_DELETE_INPUT A C expression, if true, then the input files are deleted
+ * as soon as possible.
*
* Output (chose one of these):
*
#endif
}
-#if defined(SORT_VAR_KEY) || defined(SORT_VAR_DATA)
+#if defined(SORT_VAR_KEY) || defined(SORT_VAR_DATA) || defined(SORT_UNIFY_WORKSPACE)
#include "lib/sorter/s-internal.h"
#else
#include "lib/sorter/s-fixint.h"
#else
#error No input given.
#endif
+#ifdef SORT_DELETE_INPUT
+ if (SORT_DELETE_INPUT)
+ bconfig(ctx.in_fb, BCONFIG_IS_TEMP_FILE, 1);
+#endif
#ifdef SORT_OUTPUT_FB
ASSERT(!out);
#undef SORT_INT
#undef SORT_HASH_BITS
#undef SORT_UNIFY
+#undef SORT_UNIFY_WORKSPACE
#undef SORT_INPUT_FILE
#undef SORT_INPUT_FB
#undef SORT_INPUT_PRESORT
#undef SORT_OUTPUT_THIS_FB
#undef SORT_UNIQUE
#undef SORT_ASSERT_UNIQUE
+#undef SORT_DELETE_INPUT
#undef SWAP
#undef LESS
#undef P