Blame pccts/h/set.h

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