1 /***
2  * CopyPolicy: GNU Public License 2 applies
3  * Copyright (C) by Monty (xiphmont@mit.edu)
4  ***/
5 
6 #ifndef _ISORT_H_
7 #define _ISORT_H_
8 
9 typedef struct sort_link{
10   struct sort_link *next;
11 } sort_link;
12 
13 typedef struct sort_info{
14   int16_t *vector;                /* vector (storage doesn't belong to us) */
15 
16   long  *abspos;                 /* pointer for side effects */
17   long  size;                    /* vector size */
18 
19   long  maxsize;                 /* maximum vector size */
20 
21   long sortbegin;                /* range of contiguous sorted area */
22   long lo,hi;                    /* current post, overlap range */
23   int  val;                      /* ...and val */
24 
25   /* sort structs */
26   sort_link **head;           /* sort buckets (65536) */
27 
28   long *bucketusage;          /*  of used buckets (65536) */
29   long lastbucket;
30   sort_link *revindex;
31 
32 } sort_info;
33 
34 extern sort_info *sort_alloc(long size);
35 extern void sort_unsortall(sort_info *i);
36 extern void sort_setup(sort_info *i,int16_t *vector,long *abspos,long size,
37 		       long sortlo, long sorthi);
38 extern void sort_free(sort_info *i);
39 extern sort_link *sort_getmatch(sort_info *i,long post,long overlap,int value);
40 extern sort_link *sort_nextmatch(sort_info *i,sort_link *prev);
41 
42 #define is(i) (i->size)
43 #define ib(i) (*i->abspos)
44 #define ie(i) (i->size+*i->abspos)
45 #define iv(i) (i->vector)
46 #define ipos(i,l) (l-i->revindex)
47 
48 #endif
49 
50