uint64_t value=0;
for(int i=elemEnc->numVars-1;i>=0;i--) {
value=value<<1;
- if (This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[i] ) ])
+ if (getValueSolver(This->satEncoder->cnf->solver, getEdgeVar( elemEnc->variables[i] )) )
value |= 1;
}
+ if (elemEnc->isBinaryValSigned &&
+ This->satEncoder->cnf->solver->solution[ getEdgeVar( elemEnc->variables[elemEnc->numVars-1])]) {
+ //Do sign extension of negative number
+ uint64_t highbits=0xffffffffffffffff - ((1 << (elemEnc->numVars)) - 1);
+ value+=highbits;
+ }
+ value+=elemEnc->offset;
return value;
}