//package dfatool.expressions;
//
//import java.util.ArrayList;
//import java.util.LinkedList;
//import java.util.List;
//import java.util.Set;
//
//import dfatool.values.SetValue;
//import dfatool.values.ListValue;
//import dfatool.values.Value;
//
//public class CartesianProduct extends SetExpression{
//	
//	List<Expression> list;
//
//	public CartesianProduct(List<Expression> list) {
//		this.list = list;
//	}
//
//	@Override
//	public Value evaluate(Context c) {
//		Set<Value> s = new SetValue<Value>();
//		ArrayList<Set<Value>> l = new ArrayList<Set<Value>>();
//		for(Expression e : list) l.add((Set<Value>) e.evaluate(c));
//		caculateCartesianProduct(s, l);
//		return (Value) s;
//	}
//	
//	public static void caculateCartesianProduct(Set<Value> result, List<Set<Value>> listOfSets){
//		getTuples(result, new ListValue(), listOfSets);
//	}
//	
//	public static void getTuples(Set<Value> s, ListValue t, List<Set<Value>> l){
//		if(l.size() == 0){
//			s.add(t); 
//			return;
//		}
//		List<Set<Value>> l2 = new LinkedList<Set<Value>>(l);
//		l2.remove(0);
//		for(Value e : l.get(0)){
//			ListValue tt = new ListValue(t);
//			tt.getValue().add(e);
//			getTuples(s, tt , l2);
//		}
//	}
//
//	@Override
//	public boolean checkType(Context c) {
//		boolean wellTyped = true;
//		for(Expression e : list) wellTyped = wellTyped && e.checkType(c);
//		return wellTyped;
//	}
//	
////	public static void main(String[] args) {
////		Set s = new Set();
////		s.add(new Int(1));
////		s.add(new Int(2));
////		s.add(new Int(3));
////		List<Set> l = new ArrayList<Set>();
////		l.add(s);
////		l.add(s);
////		CartesianProduct cp =  new CartesianProduct(null);
////		Set result = new Set();
////		cp.getTuples(result, new Tuple(), l);
////		
////		System.out.println(result);
////	}
//
//}
