isort.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:1k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

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