/***************************  bv-bool-ops.h  *****************************

  Purpose:	External declarations for boolean operations implemented
  		as bit vectors.

  Provenance:	Written and tested by S. Wartik, April 1991.

  Notes:	None.

**/

#ifndef TRUE
#   define TRUE 1
#   define FALSE 0
    typedef int boolean;
#endif

#define MAX_ELEMENTS 256
#define WORDSIZE 8

typedef struct {	/* A set consists of the bounds	*/
    int     lower;	/* defined for it, and space to	*/
    int     upper;	/* record what's in it.		*/
    char    bits[MAX_ELEMENTS/WORDSIZE];
} set;

typedef int	elementType;  /* The element type is defined as "int".  It  */
			      /* could be changed to any scalar type.       */

#ifdef __STDC__

extern void Create(int lower, int upper, set *s);

extern void Clear(set *s);
extern void Insert(set *s, elementType e);
extern void Delete(set *s, elementType e);

extern void Unite(set *s1, set *s2, set *s3);
extern void Intersect(set *s1, set *s2, set *s3);
extern void Subtract(set *s1, set *s2, set *s3);

extern boolean Empty(set *s);
extern boolean Member(set *s, elementType e);

extern void Copy(set *source, set *destination);

extern void Iterate(set *s, boolean (*f)());

boolean Error_Occurred();

#else

extern void Create();

extern void Clear();
extern void Insert();
extern void Delete();

extern void Unite();
extern void Intersect();
extern void Subtract();

extern boolean Empty();
extern boolean Member();

extern void Copy();

extern void Iterate();

extern boolean Error_Occurred();

#endif
