1 /*
2  * This file has been modified for the cdrkit suite.
3  *
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).
6  *
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.
10  *
11  */
12 
13 /* @(#)isort.h	1.10 04/02/18 J. Schilling from cdparanoia-III-alpha9.8 */
14 /*
15  *	Modifications to make the code portable Copyright (c) 2002 J. Schilling
16  */
17 /*
18  * CopyPolicy: GNU Public License 2 applies
19  * Copyright (C) by Monty (xiphmont@mit.edu)
20  */
21 
22 #ifndef	_ISORT_H_
23 #define	_ISORT_H_
24 
25 typedef struct sort_link {
26 	struct sort_link *next;
27 } sort_link;
28 
29 typedef struct sort_info {
30 	Int16_t		*vector;	/* vector */
31 					/* vec storage doesn't belong to us */
32 
33 	long		*abspos;	/* pointer for side effects */
34 	long		size;		/* vector size */
35 
36 	long		maxsize;	/* maximum vector size */
37 
38 	long		sortbegin;	/* range of contiguous sorted area */
39 	long		lo;
40 	long		hi;		/* current post, overlap range */
41 	int		val;		/* ...and val */
42 
43 	/*
44 	 * sort structs
45 	 */
46 	sort_link	**head;		/* sort buckets (65536) */
47 
48 	long		*bucketusage;	/* of used buckets (65536) */
49 	long		lastbucket;
50 	sort_link	*revindex;
51 
52 } sort_info;
53 
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,
60 											int value);
61 extern sort_link	*sort_nextmatch(sort_info * i, sort_link * prev);
62 
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)
68 
69 #endif
70