/************************************************
 *
 *  *** HAPPy Pascal  compiler ***
 *     set operation routine 
 *
 *     Copyright (c) H.Asano 1992
 ************************************************/
#define EXTERN extern
#include <stdarg.h>
#include "pascomp.h"
         
static va_list marker ;

/****************************************/
/*  mkset(s,i,j,k,...,-1) :             */
/*       要素i,j,k...を持つ集合sの作成  */
/*          引数は-1で最後とする        */
/****************************************/
Set *mkset(Set *s,int first,...)
{
  int i=first ;
 
     s->H=0;
     s->L=0;
     va_start(marker,first) ;
     while(i != -1) {
      addset((*s),i) ;
      i = va_arg(marker,int) ;
     }
     return(s) ;
}

/****************************************/
/*  orset(s1,s2) :  s1 = s1とs2和集合   */
/****************************************/
Set *orset(Set *s1,Set *s2)
{
    s1->H |= s2->H ;
    s1->L |= s2->L ;
    return(s1) ;
}

/****************************************/
/*  dfset(s1,s2) :  s1 = s1とs2の差集合 */
/****************************************/
Set *dfset(Set *s1,Set *s2)
{
     /* 0-0 -> 0 */
     /* 0-1 -> 0 */
     /* 1-0 -> 1 */
     /* 1-1 -> 0 */
                    
     s1->H &= (s1->H ^ s2->H) ;
     s1->L &= (s1->L ^ s2->L) ;
     return(s1) ;
}
