]> git.lizzy.rs Git - plan9front.git/blob - sys/src/libsat/satmore.c
etheriwl: don't break controller on command flush timeout
[plan9front.git] / sys / src / libsat / satmore.c
1 #include <u.h>
2 #include <libc.h>
3 #include <sat.h>
4 #include "impl.h"
5
6 int
7 satmore(SATSolve *s)
8 {
9         int *a, i, n;
10
11         if(s == nil) return 1;
12         s->scrap = a = satrealloc(s, nil, s->nvar * sizeof(int));
13         n = 0;
14         for(i = 0; i < s->nvar; i++){
15                 if((s->var[i].flags & VARUSER) != 0) continue;
16                 switch(s->lit[2*i].val){
17                 case 0: a[n++] = i+1; break;
18                 case 1: a[n++] = -(i+1); break;
19                 }
20         }
21         if(n > 0)
22                 satadd1(s, a, n);
23         if(n == 1)
24                 s->var[abs(a[0])-1].flags &= ~VARUSER;
25         free(a);
26         s->scrap = nil;
27         return satsolve(s);
28 }