-/* PSPP - computes sample statistics.
- Copyright (C) 1997-9, 2000 Free Software Foundation, Inc.
+/* PSPP - a program for statistical analysis.
+ Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301, USA. */
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-#if !sort_h
-#define sort_h 1
+#ifndef MATH_SORT_H
+#define MATH_SORT_H 1
-#include <stddef.h>
-#include <stdbool.h>
-
-struct casereader;
-struct dictionary;
-struct variable;
-
-extern int min_buffers ;
-extern int max_buffers ;
-extern bool allow_internal_sort ;
+/* Support for sorting cases.
+ Use sort_create_writer() to sort cases in the most general way:
-/* Sort direction. */
-enum sort_direction
- {
- SRT_ASCEND, /* A, B, C, ..., X, Y, Z. */
- SRT_DESCEND /* Z, Y, X, ..., C, B, A. */
- };
+ - Create a casewriter with sort_create_writer(), specifying the sort
+ criteria.
+ - Write all of the cases to be sorted to the casewriter, e.g. with
+ casewriter_write().
+ - Obtain the sorted results with casewriter_make_reader().
-/* A sort criterion. */
-struct sort_criterion
- {
- int fv; /* Variable data index. */
- int width; /* 0=numeric, otherwise string width. */
- enum sort_direction dir; /* Sort direction. */
- };
+ sort_execute() and sort_execute_1var() are shortcuts for situations where the
+ cases are already available from a casereader.
-/* A set of sort criteria. */
-struct sort_criteria
- {
- struct sort_criterion *crits;
- size_t crit_cnt;
- };
+ All of these functions can efficiently sort data bigger than memory. */
+struct subcase;
+struct caseproto;
+struct variable;
-void sort_destroy_criteria (struct sort_criteria *);
-
-struct casefile *sort_execute (struct casereader *,
- const struct sort_criteria *);
-
-struct dataset ;
-bool sort_active_file_in_place (struct dataset *ds,
- const struct sort_criteria *);
+extern int min_buffers ;
+extern int max_buffers ;
-struct casefile *sort_active_file_to_casefile (struct dataset *ds,
- const struct sort_criteria *);
+struct casewriter *sort_create_writer (const struct subcase *,
+ const struct caseproto *);
+struct casereader *sort_execute (struct casereader *, const struct subcase *);
+struct casereader *sort_execute_1var (struct casereader *,
+ const struct variable *);
-#endif /* !sort_h */
+#endif /* math/sort.h */