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