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