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