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 #include <stdint.h>
10 
11 typedef struct sort_link{
12   struct sort_link *next;
13 } sort_link;
14 
15 typedef struct sort_info{
16   int16_t *vector;                /* vector (storage doesn't belong to us) */
17 
18   long  *abspos;                 /* pointer for side effects */
19   long  size;                    /* vector size */
20 
21   long  maxsize;                 /* maximum vector size */
22 
23   long sortbegin;                /* range of contiguous sorted area */
24   long lo,hi;                    /* current post, overlap range */
25   int  val;                      /* ...and val */
26 
27   /* sort structs */
28   sort_link **head;           /* sort buckets (65536) */
29 
30   long *bucketusage;          /*  of used buckets (65536) */
31   long lastbucket;
32   sort_link *revindex;
33 
34 } sort_info;
35 
36 extern sort_info *sort_alloc(long size);
37 extern void sort_unsortall(sort_info *i);
38 extern void sort_setup(sort_info *i,int16_t *vector,long *abspos,long size,
39 		       long sortlo, long sorthi);
40 extern void sort_free(sort_info *i);
41 extern sort_link *sort_getmatch(sort_info *i,long post,long overlap,int value);
42 extern sort_link *sort_nextmatch(sort_info *i,sort_link *prev);
43 
44 #define is(i) (i->size)
45 #define ib(i) (*i->abspos)
46 #define ie(i) (i->size+*i->abspos)
47 #define iv(i) (i->vector)
48 #define ipos(i,l) (l-i->revindex)
49 
50 #endif
51 
52