set.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:3k
源码类别:

编译器/解释器

开发平台:

Others

  1. #ifndef __GATE_SET_H
  2. #define __GATE_SET_H
  3. /* set.h
  4. The following is a general-purpose set library originally developed
  5. by Hank Dietz and enhanced by Terence Parr to allow dynamic sets.
  6. Sets are now structs containing the #words in the set and
  7. a pointer to the actual set words.
  8. 1987 by Hank Dietz
  9. Modified by:
  10. Terence Parr
  11. Purdue University
  12. October 1989
  13. Added ANSI prototyping Dec. 1992 -- TJP
  14. */
  15. #include "pcctscfg.h"
  16. #ifdef NOT_USED /* SEE config.h */
  17. /* Define usable bits per unsigned int word */
  18. #ifdef PC
  19. #define WORDSIZE 16
  20. #define LogWordSize 4
  21. #else
  22. #define WORDSIZE 32
  23. #define LogWordSize 5
  24. #endif
  25. #define BytesPerWord sizeof(unsigned)
  26. #endif
  27. #define SETSIZE(a) ((a).n<<LogWordSize) /* Maximum items per set */
  28. #define MODWORD(x) ((x) & (WORDSIZE-1)) /* x % WORDSIZE */
  29. #define DIVWORD(x) ((x) >> LogWordSize) /* x / WORDSIZE */
  30. #define nil (~((unsigned) 0)) /* An impossible set member all bits on (big!) */
  31. typedef struct _set {
  32. unsigned int n; /* Number of words in set */
  33. unsigned *setword;
  34. } set;
  35. #define set_init {0, NULL}
  36. #define set_null(a) ((a).setword==NULL)
  37. #define NumBytes(x) (((x)>>3)+1) /* Num bytes to hold x */
  38. #define NumWords(x) ((((unsigned)(x))>>LogWordSize)+1) /* Num words to hold x */
  39. /* M a c r o s */
  40. /* make arg1 a set big enough to hold max elem # of arg2 */
  41. #define set_new(a,_max) 
  42. if (((a).setword=(unsigned *)calloc(NumWords(_max),BytesPerWord))==NULL) 
  43.         fprintf(stderr, "set_new: Cannot allocate set with max of %dn", _max); 
  44.         (a).n = NumWords(_max);
  45. #define set_free(a)
  46. {if ( (a).setword != NULL ) free((char *)((a).setword));
  47. (a) = empty;}
  48. #ifdef __STDC__
  49. extern void set_size( unsigned );
  50. extern unsigned int set_deg( set );
  51. extern set set_or( set, set );
  52. extern set set_and( set, set );
  53. extern set set_dif( set, set );
  54. extern set set_of( unsigned );
  55. extern void set_ext( set *, unsigned int );
  56. extern set set_not( set );
  57. extern int set_equ( set, set );
  58. extern int set_sub( set, set );
  59. extern unsigned set_int( set );
  60. extern int set_el( unsigned, set );
  61. extern int set_nil( set );
  62. extern char * set_str( set );
  63. extern set set_val( register char * );
  64. extern void set_orel( unsigned, set * );
  65. extern void set_orin( set *, set );
  66. extern void set_andin( set *, set );
  67. extern void set_rm( unsigned, set );
  68. extern void set_clr( set );
  69. extern set set_dup( set );
  70. extern void set_PDQ( set, register unsigned * );
  71. extern unsigned *set_pdq( set );
  72. extern void _set_pdq( set a, register unsigned *q );
  73. extern unsigned int set_hash( set, register unsigned int );
  74. #else
  75. extern void set_size();
  76. extern unsigned int set_deg();
  77. extern set set_or();
  78. extern set set_and();
  79. extern set set_dif();
  80. extern set set_of();
  81. extern void set_ext();
  82. extern set set_not();
  83. extern int set_equ();
  84. extern int set_sub();
  85. extern unsigned set_int();
  86. extern int set_el();
  87. extern int set_nil();
  88. extern char * set_str();
  89. extern set set_val();
  90. extern void set_orel();
  91. extern void set_orin();
  92. extern void set_andin();
  93. extern void set_rm();
  94. extern void set_clr();
  95. extern set set_dup();
  96. extern void set_PDQ();
  97. extern unsigned *set_pdq();
  98. extern void _set_pdq();
  99. extern unsigned int set_hash();
  100. #endif
  101. extern set empty;
  102. #endif