- encode_screen(screen);
-
- sokoban_free(screen);
-
- switch(strat){
- case COORD:
- DPRINT("Encoding coordinate based\n");
- break;
- case OBJECT:
- DPRINT("Encoding object based\n");
- break;
- case HYBRID:
- DPRINT("Encoding hybrid based\n");
- break;
- default:
- ERRPRINT("Huh?");
- exit(2);
+ state *init = encode_screen(screen);
+ rels *rls = encode_rel(screen);
+
+ BDD old = sylvan_false;
+ BDD new = init->bdd;
+ int iteration = 0;
+ while(new != old){
+ old = new;
+ ERRPRINT("Iteration %d\n", iteration++);
+ trans_t *t = rls->rell;
+
+ while (t != NULL){
+ new = sylvan_or(new, sylvan_relnext(new, t->bdd, t->varset.varset));
+ t = t->next_rel;
+ }
+ t = rls->relu;
+ while (t != NULL){
+ new = sylvan_or(new, sylvan_relnext(new, t->bdd, t->varset.varset));
+ t = t->next_rel;
+ }
+ t = rls->relr;
+ while (t != NULL){
+ new = sylvan_or(new, sylvan_relnext(new, t->bdd, t->varset.varset));
+ t = t->next_rel;
+ }
+ t = rls->reld;
+ while (t != NULL){
+ new = sylvan_or(new, sylvan_relnext(new, t->bdd, t->varset.varset));
+ t = t->next_rel;
+ }