5 public class SetQuantifier extends Quantifier {
10 public SetQuantifier() {
14 public void setVar(VarDescriptor vd) {
18 public void setSet(SetDescriptor sd) {
22 public Set getRequiredDescriptors() {
23 HashSet v = new HashSet();
28 public VarDescriptor getVar() {
32 public SetDescriptor getSet() {
36 public String toString() {
37 return "set quantifier " + var.getSymbol() + " in " + set.getSymbol();
40 public void generate_open(CodeWriter writer) {
41 writer.addDeclaration("struct SimpleIterator",var.getSafeSymbol()+"_iterator");
42 writer.outputline("for (SimpleHashiterator("+set.getSafeSymbol()+"_hash, & "+ var.getSafeSymbol()+"_iterator); hasNext(&"+var.getSafeSymbol()+"_iterator); )");
44 writer.addDeclaration(var.getType().getGenerateType().toString(), var.getSafeSymbol());
45 writer.outputline(var.getSafeSymbol() + " = (" + var.getType().getGenerateType() + ") next(&"+var.getSafeSymbol()+"_iterator);");
48 public void generate_open(CodeWriter writer, String type,int number, String left,String right) {
49 VarDescriptor tmp=VarDescriptor.makeNew("flag");
50 writer.addDeclaration("struct SimpleIterator",var.getSafeSymbol()+"_iterator");
51 writer.outputline("SimpleHashiterator("+set.getSafeSymbol()+"_hash, &"+var.getSafeSymbol()+"_iterator);");
52 writer.addDeclaration("int",tmp.getSafeSymbol());
53 writer.outputline(tmp.getSafeSymbol()+"=0;");
54 writer.outputline("if ("+type+"=="+number+")");
55 writer.outputline(tmp.getSafeSymbol()+"=1;");
57 writer.outputline("while("+tmp.getSafeSymbol()+"||(("+type+"!="+number+")&&hasNext(&"+var.getSafeSymbol()+"_iterator)))");
59 writer.addDeclaration(var.getType().getGenerateType().toString(), var.getSafeSymbol());
60 writer.outputline("if ("+type+"=="+number+")");
62 writer.outputline(tmp.getSafeSymbol()+"=0;");
63 writer.outputline(var.getSafeSymbol() + " = (" + var.getType().getGenerateType() + ") " + left + ";");
65 writer.outputline("else");
66 writer.outputline(var.getSafeSymbol() + " = (" + var.getType().getGenerateType() + ") next(&"+var.getSafeSymbol()+"_iterator);");
69 public int generate_worklistload(CodeWriter writer, int offset) {
70 String varname = var.getSafeSymbol();
71 writer.addDeclaration("int", varname);
72 writer.outputline(varname + " = wi->word" + offset + ";");
76 public int generate_workliststore(CodeWriter writer, int offset) {
77 String varname = var.getSafeSymbol();
78 writer.outputline("wi->word" + offset + " = " + varname + ";");