1 /* $FreeBSD: head/usr.bin/sort/file.h 281182 2015-04-07 01:17:49Z pfg $ */
4 * Copyright (C) 2009 Gabor Kovesdan <gabor@FreeBSD.org>
5 * Copyright (C) 2012 Oleg Moskalenko <mom040267@gmail.com>
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 #if !defined(__SORT_FILE_H__)
31 #define __SORT_FILE_H__
36 #define SORT_DEFAULT 0
38 #define SORT_MERGESORT 2
39 #define SORT_HEAPSORT 3
40 #define SORT_RADIXSORT 4
42 #define DEFAULT_SORT_ALGORITHM SORT_HEAPSORT
43 #define DEFAULT_SORT_FUNC heapsort
46 * List of data to be sorted.
50 struct sort_list_item
**list
;
51 unsigned long long memsize
;
63 * List of files to be sorted
77 extern unsigned long long free_memory
;
78 extern unsigned long long available_free_memory
;
80 /* Are we using mmap ? */
83 /* temporary file dir */
85 extern const char *tmpdir
;
88 * Max number of simultaneously open files (including the output file).
90 extern size_t max_open_files
;
95 extern const char* compress_program
;
99 struct file_reader
*file_reader_init(const char *fsrc
);
100 struct bwstring
*file_reader_readline(struct file_reader
*fr
);
101 void file_reader_free(struct file_reader
*fr
);
103 void init_tmp_files(void);
104 void clear_tmp_files(void);
105 char *new_tmp_file_name(void);
106 void tmp_file_atexit(const char *tmp_file
);
108 void file_list_init(struct file_list
*fl
, bool tmp
);
109 void file_list_add(struct file_list
*fl
, char *fn
, bool allocate
);
110 void file_list_populate(struct file_list
*fl
, int argc
, char **argv
, bool allocate
);
111 void file_list_clean(struct file_list
*fl
);
113 int check(const char *);
114 void merge_files(struct file_list
*fl
, const char *fn_out
);
115 FILE *openfile(const char *, const char *);
116 void closefile(FILE *, const char *);
117 int procfile(const char *fn
, struct sort_list
*list
, struct file_list
*fl
);
119 void sort_list_init(struct sort_list
*l
);
120 void sort_list_add(struct sort_list
*l
, struct bwstring
*str
);
121 void sort_list_clean(struct sort_list
*l
);
122 void sort_list_dump(struct sort_list
*l
, const char *fn
);
124 void sort_list_to_file(struct sort_list
*list
, const char *outfile
);
126 #endif /* __SORT_FILE_H__ */