Date: Fri, 5 Feb 2010 06:00:39 GMT From: Gabor Kovesdan <gabor@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 174344 for review Message-ID: <201002050600.o1560dL9085747@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/chv.cgi?CH=174344 Change 174344 by gabor@gabor_aspire on 2010/02/05 05:59:38 - Add support for various sorting algoritms by command line options - Add support for -s - Remove some leftovers Affected files ... .. //depot/projects/soc2008/gabor_textproc/newsort/sort.c#6 edit .. //depot/projects/soc2008/gabor_textproc/newsort/sort.h#4 edit Differences ... ==== //depot/projects/soc2008/gabor_textproc/newsort/sort.c#6 (text+ko) ==== @@ -61,6 +61,7 @@ extern char *__progname; int count, listlen = 0; +int sort_method = SORT_QSORT; wchar_t **list; wchar_t field_sep = L' '; unsigned long sfield, lfield; @@ -76,10 +77,17 @@ bool nflag; bool mflag; bool rflag; +bool sflag; bool uflag; bool zflag; -#define OPTIONS "cbdfghik:Mmno:rS:t:T:uVz" +enum { + QSORT_OPT = CHAR_MAX + 1, + MERGESORT_OPT, + HEAPSORT_OPT +}; + +#define OPTIONS "cbdfghik:Mmno:rst:uVz" struct option long_options[]= { @@ -96,12 +104,14 @@ {"merge", no_argument, NULL, 'm'}, {"output", required_argument, NULL, 'o'}, {"reverse", no_argument, NULL, 'r'}, - {"buffer-size", required_argument, NULL, 'S'}, + {"stable", no_argument, NULL, 's'}, {"field-separator", required_argument, NULL, 't'}, -// {"temporary-directory", required_argument, NULL, 'T'}, {"unique", no_argument, NULL, 'u'}, {"version", no_argument, NULL, 'V'}, {"zero-terminated", no_argument, NULL, 'z'}, + {"qsort", no_argument, NULL, QSORT_OPT}, + {"mergesort", no_argument, NULL, MERGESORT_OPT}, + {"heapsort", no_argument, NULL, HEAPSORT_OPT}, {NULL, no_argument, NULL, 0} }; @@ -114,7 +124,7 @@ int main(int argc, char *argv[]) { - char c; + int c; char *sptr; char *outfile; @@ -196,10 +206,8 @@ case 'r': rflag = true; break; - case 'S': - bufsiz = strtoull(optarg, (char **)NULL, 10); - if ((errno == ERANGE) && (bufsiz == ULLONG_MAX)) - err(2, NULL); + case 's': + sflag = true; break; case 't': if (strlen(optarg) > 1) @@ -224,6 +232,15 @@ case 'z': zflag = true; break; + case QSORT_OPT: + sort_method = SORT_QSORT; + break; + case MERGESORT_OPT: + sort_method = SORT_MERGESORT; + break; + case HEAPSORT_OPT: + sort_method = SORT_HEAPSORT; + break; case 'h': default: usage(); @@ -249,6 +266,9 @@ if (mflag && (argc != 2)) errx(1, getstr(2), 'c'); + if (sflag && (sort_method != SORT_MERGESORT)) + errx(2, "stable sort is only available with merge sort"); + #ifndef WITHOUT_NLS catclose(catalog); #endif @@ -269,7 +289,19 @@ ++argv; } - qsort(list, count, sizeof(wchar_t *), coll); + switch (sort_method) { + case SORT_QSORT: + qsort(list, count, sizeof(wchar_t *), coll); + break; + case SORT_MERGESORT: + if (mergesort(list, count, sizeof(wchar_t *), coll) == -1) + err(2, NULL); + break; + case SORT_HEAPSORT: + if (heapsort(list, count, sizeof(wchar_t *), coll) == -1) + err(2, NULL); + break; + } for (int i = 0; i < count; i++) printf("%ls\n", list[i]); ==== //depot/projects/soc2008/gabor_textproc/newsort/sort.h#4 (text+ko) ==== @@ -29,10 +29,9 @@ #include <wchar.h> #define VERSION "5.3.0-FreeBSD" -#define OPT_BUFSIZE (64 * 1024) -#define MAX_BUFSIZE (512 * 1024) -#define OPT_SLICES 8 -#define TMPPAT "/sort.XXXXXXXX" +#define SORT_QSORT 0 +#define SORT_MERGESORT 1 +#define SORT_HEAPSORT 2 #ifdef WITHOUT_NLS #define getstr(n) nlsstr[n] @@ -49,11 +48,9 @@ * sort.c */ extern bool cflag, bflag, dflag, fflag, gflag, iflag, kflag, Mflag, mflag, - nflag, rflag, uflag, zflag; -extern int bufcnt, count, listlen, tempno; + nflag, rflag, sflag, uflag, zflag; +extern int count, listlen; extern wchar_t field_sep, **list; -extern char **tempfiles, *tmpdir; -extern unsigned long long bufsiz; extern unsigned long lfield, sfield; /* @@ -75,9 +72,3 @@ */ void * sort_malloc(size_t); void * sort_realloc(void *, size_t); - -/* - * msort.c - */ -wchar_t **merge(wchar_t **, int, wchar_t **, int); -wchar_t **merge_sort(wchar_t **, int);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002050600.o1560dL9085747>
