/*
* Sherlock Library -- Universal Sorter
*
- * (c) 2001--2002 Martin Mares <mj@ucw.cz>
+ * (c) 2001--2003 Martin Mares <mj@ucw.cz>
+ *
+ * This software may be freely distributed and used according to the terms
+ * of the GNU Lesser General Public License.
*/
/*
* defined by the sorter)
* SORT_PRESORT include an in-core presorting pass
* SORT_UNIFY merge items with identical keys
+ * SORT_REGULAR all items are equally long and they don't contain
+ * anything else than the key. In this case, the sorter
+ * automatically supplies fetch_key, copy_data, fetch_item
+ * and store_item functions.
* SORT_DELETE_INPUT a C expression, if true, the input files are
* deleted as soon as possible
* SORT_INPUT_FILE input is a file with this name
* from the list of items, but not deallocated, so
* the remaining item can freely reference data of the
* other one.
+ *
+ * After including this file, all parameter macros are automatically
+ * undef'd.
*/
/* Declarations of externals from sorter.c */
#define LESS <=
#endif
+#ifdef SORT_REGULAR
+
+static inline int
+P(fetch_key)(struct fastbuf *in, SORT_KEY *x)
+{
+ return breadb(in, x, sizeof(*x));
+}
+
+static inline void
+P(copy_data)(struct fastbuf *in UNUSED, struct fastbuf *out, SORT_KEY *x)
+{
+ bwrite(out, x, sizeof(*x));
+}
+
+static inline byte *
+P(fetch_item)(struct fastbuf *in UNUSED, SORT_KEY *x UNUSED, byte *limit UNUSED)
+{
+ return (byte *)(x+1);
+}
+
+static inline void
+P(store_item)(struct fastbuf *out, SORT_KEY *x)
+{
+ bwrite(out, x, sizeof(*x));
+}
+
+#endif
+
static struct fastbuf *
P(flush_out)(struct fastbuf *out)
{
#endif
#ifdef SORT_DELETE_INPUT
- fb1->is_temp_file = SORT_DELETE_INPUT;
+ bconfig(fb1, BCONFIG_IS_TEMP_FILE, SORT_DELETE_INPUT);
#endif
sorter_pass_counter = 1;
#ifdef SORT_PRESORT
#ifdef SORT_OUTPUT_FB
return fb1;
#else
- fb1->is_temp_file = 0;
+ bconfig(fb1, BCONFIG_IS_TEMP_FILE, 0);
if (rename(fb1->name, outname) < 0)
die("rename(%s,%s): %m", fb1->name, outname);
bclose(fb1);
#undef LESS
#undef SWAP
#undef SORT_NODE
+#undef SORT_KEY
+#undef SORT_PREFIX
+#undef SORT_UNIFY
+#undef SORT_REGULAR
+#undef SORT_DELETE_INPUT
+#undef SORT_INPUT_FILE
+#undef SORT_INPUT_FB
+#undef SORT_INPUT_FBPAIR
+#undef SORT_OUTPUT_FILE
+#undef SORT_OUTPUT_FB
#endif /* !SORT_DECLARE_ONLY */