+++ /dev/null
-#ifndef __GATE_SET_H\r
-#define __GATE_SET_H\r
-\r
-/* set.h\r
-\r
- The following is a general-purpose set library originally developed\r
- by Hank Dietz and enhanced by Terence Parr to allow dynamic sets.\r
- \r
- Sets are now structs containing the #words in the set and\r
- a pointer to the actual set words.\r
-\r
- 1987 by Hank Dietz\r
- \r
- Modified by:\r
- Terence Parr\r
- Purdue University\r
- October 1989\r
-\r
- Added ANSI prototyping Dec. 1992 -- TJP\r
-*/\r
-\r
-#include "pcctscfg.h"\r
-\r
-#ifdef NOT_USED /* SEE config.h */\r
-/* Define usable bits per unsigned int word */\r
-#ifdef PC\r
-#define WORDSIZE 16\r
-#define LogWordSize 4\r
-#else\r
-#define WORDSIZE 32\r
-#define LogWordSize 5\r
-#endif\r
-#define BytesPerWord sizeof(unsigned)\r
-#endif\r
-\r
-#define SETSIZE(a) ((a).n<<LogWordSize) /* Maximum items per set */\r
-#define MODWORD(x) ((x) & (WORDSIZE-1)) /* x % WORDSIZE */\r
-#define DIVWORD(x) ((x) >> LogWordSize) /* x / WORDSIZE */\r
-#define nil (~((unsigned) 0)) /* An impossible set member all bits on (big!) */\r
-\r
-typedef struct _set {\r
- unsigned int n; /* Number of words in set */\r
- unsigned *setword;\r
- } set;\r
-\r
-#define set_init {0, NULL}\r
-#define set_null(a) ((a).setword==NULL)\r
-\r
-#define NumBytes(x) (((x)>>3)+1) /* Num bytes to hold x */\r
-#define NumWords(x) ((((unsigned)(x))>>LogWordSize)+1) /* Num words to hold x */\r
-\r
-\r
-/* M a c r o s */\r
-\r
-/* make arg1 a set big enough to hold max elem # of arg2 */\r
-#define set_new(a,_max) \\r
-if (((a).setword=(unsigned *)calloc(NumWords(_max),BytesPerWord))==NULL) \\r
- fprintf(stderr, "set_new: Cannot allocate set with max of %d\n", _max); \\r
- (a).n = NumWords(_max);\r
-\r
-#define set_free(a) \\r
- {if ( (a).setword != NULL ) free((char *)((a).setword)); \\r
- (a) = empty;}\r
-\r
-#ifdef __USE_PROTOS\r
-extern void set_size( unsigned );\r
-extern unsigned int set_deg( set );\r
-extern set set_or( set, set );\r
-extern set set_and( set, set );\r
-extern set set_dif( set, set );\r
-extern set set_of( unsigned );\r
-extern void set_ext( set *, unsigned int );\r
-extern set set_not( set );\r
-extern int set_equ( set, set );\r
-extern int set_sub( set, set );\r
-extern unsigned set_int( set );\r
-extern int set_el( unsigned, set );\r
-extern int set_nil( set );\r
-extern char * set_str( set );\r
-extern set set_val( register char * );\r
-extern void set_orel( unsigned, set * );\r
-extern void set_orin( set *, set );\r
-extern void set_andin( set *, set );\r
-extern void set_rm( unsigned, set );\r
-extern void set_clr( set );\r
-extern set set_dup( set );\r
-extern void set_PDQ( set, register unsigned * );\r
-extern unsigned *set_pdq( set );\r
-extern void _set_pdq( set a, register unsigned *q );\r
-extern unsigned int set_hash( set, register unsigned int );\r
-#else\r
-extern void set_size();\r
-extern unsigned int set_deg();\r
-extern set set_or();\r
-extern set set_and();\r
-extern set set_dif();\r
-extern set set_of();\r
-extern void set_ext();\r
-extern set set_not();\r
-extern int set_equ();\r
-extern int set_sub();\r
-extern unsigned set_int();\r
-extern int set_el();\r
-extern int set_nil();\r
-extern char * set_str();\r
-extern set set_val();\r
-extern void set_orel();\r
-extern void set_orin();\r
-extern void set_andin();\r
-extern void set_rm();\r
-extern void set_clr();\r
-extern set set_dup();\r
-extern void set_PDQ();\r
-extern unsigned *set_pdq();\r
-extern void _set_pdq();\r
-extern unsigned int set_hash();\r
-#endif\r
-\r
-extern set empty;\r
-\r
-#endif\r