2 * This file has been modified for the cdrkit suite.
4 * The behaviour and appearence of the program code below can differ to a major
5 * extent from the version distributed by the original author(s).
7 * For details, see Changelog file distributed with the cdrkit package. If you
8 * received this file from another source then ask the distributing person for
9 * a log of modifications.
13 /* @(#)isort.h 1.10 04/02/18 J. Schilling from cdparanoia-III-alpha9.8 */
15 * Modifications to make the code portable Copyright (c) 2002 J. Schilling
18 * CopyPolicy: GNU Public License 2 applies
19 * Copyright (C) by Monty (xiphmont@mit.edu)
25 typedef struct sort_link {
26 struct sort_link *next;
29 typedef struct sort_info {
30 Int16_t *vector; /* vector */
31 /* vec storage doesn't belong to us */
33 long *abspos; /* pointer for side effects */
34 long size; /* vector size */
36 long maxsize; /* maximum vector size */
38 long sortbegin; /* range of contiguous sorted area */
40 long hi; /* current post, overlap range */
41 int val; /* ...and val */
46 sort_link **head; /* sort buckets (65536) */
48 long *bucketusage; /* of used buckets (65536) */
54 extern sort_info *sort_alloc(long size);
55 extern void sort_unsortall(sort_info * i);
56 extern void sort_setup(sort_info * i, Int16_t * vector, long *abspos,
57 long size, long sortlo, long sorthi);
58 extern void sort_free(sort_info * i);
59 extern sort_link *sort_getmatch(sort_info * i, long post, long overlap,
61 extern sort_link *sort_nextmatch(sort_info * i, sort_link * prev);
63 #define is(i) ((i)->size)
64 #define ib(i) (*(i)->abspos)
65 #define ie(i) ((i)->size + *(i)->abspos)
66 #define iv(i) ((i)->vector)
67 #define ipos(i, l) ((l) - (i)->revindex)