/* 
 *  This library was designed to be used in the translation
 *  of Liss programs to C programs
 */

typedef char * sElem;

typedef struct snode * set;

typedef struct snode {
	sElem value;
	set left;
	set right;
		} tNode;


// creates a new set with the values that are in array
set newSet(sElem array[], int dim);

// returns a poiter to the node in set s, where the next value will be added
set addElemSet(set s);

// checks if op is an operator
int isOperator(char * op);

// creates a new node with value=var, left=null and right=null and returns a pointer to the node
set newNodeSet(sElem val);

// creates a new set s_dest equal to set s_orig
void assignSet(set s_orig, set * s_dest);

// returns a new set equal to set s
set duplicateSet(set s);

// cleans a Set
void cleanSet(set * s);

// checks if element val belongs to set s
int isInSet(int val, set s);

// returns the logic value of operation op between values val1 and val2
int calcBoolSet(int val1, char * op, int val2);

// intercepts two sets
set interceptionSet(set s1, set s2);

// unifies two sets
set unionSet(set s1, set s2);
