From: trevor_hansen Date: Mon, 2 Jan 2012 12:47:11 +0000 (+0000) Subject: Refactor X-Git-Url: https://git.unchartedbackwaters.co.uk/w/?a=commitdiff_plain;h=c3664c9616e91760d4f0c09396360152ae1abc5c;p=francis%2Fstp.git Refactor git-svn-id: https://stp-fast-prover.svn.sourceforge.net/svnroot/stp-fast-prover/trunk/stp@1462 e59a4935-1847-0410-ae03-e826735625c1 --- diff --git a/src/to-sat/BitBlaster.cpp b/src/to-sat/BitBlaster.cpp index 0932f19..76c334f 100644 --- a/src/to-sat/BitBlaster.cpp +++ b/src/to-sat/BitBlaster.cpp @@ -1150,7 +1150,9 @@ BBNodeVec BitBlaster::buildAdditionNetworkResult(stack::buildAdditionNetworkResult(stack -void BitBlaster::buildAdditionNetworkResult(stack* products, set& support, +void BitBlaster::buildAdditionNetworkResult(stack* from_, stack* to_, set& support, const int bitWidth, const int i, const int minTrue, const int maxTrue ) { - while (products[i].size() >= 2) { + stack from = *from_; + stack to = *to_; + + while (from.size() >= 2) { BBNode c; - if (products[i].size() == 2) + if (from.size() == 2) c = nf->getFalse(); else { - c = products[i].top(); - products[i].pop(); + c = from.top(); + from.pop(); } - const BBNode a = products[i].top(); - products[i].pop(); - const BBNode b = products[i].top(); - products[i].pop(); + const BBNode a = from.top(); + from.pop(); + const BBNode b = from.top(); + from.pop(); BBNode carry, sum; @@ -1216,7 +1221,7 @@ void BitBlaster::buildAdditionNetworkResult(stack { // I experimented with making products[] a deque and accessing the front and back of the queue. // As a stack is works considerably better. - products[i].push(sum); + from.push(sum); } if (conjoin_to_top && maxTrue ==1) { @@ -1224,13 +1229,14 @@ void BitBlaster::buildAdditionNetworkResult(stack } else if (i + 1 != bitWidth && carry != BBFalse) { - products[i + 1].push(carry); + assert(to != NULL); + to.push(carry); } } - if (0==products[i].size()) - products[i].push(BBFalse); + if (0==from.size()) + from.push(BBFalse); - assert(1==products[i].size()); + assert(1==from.size()); } @@ -1328,7 +1334,7 @@ BBNodeVec BitBlaster::multWithBounds(const ASTNode&n, sta if (debug_bounds) cerr << "A"; - buildAdditionNetworkResult(products,toConjoinToTop,bitWidth,i, ms.sumL[i], ms.sumH[i]); + buildAdditionNetworkResult(&(products[i]), ((i+1==bitWidth)?NULL: &(products[i+1])), toConjoinToTop,bitWidth,i, ms.sumL[i], ms.sumH[i]); } assert(products[i].size() == 1); diff --git a/src/to-sat/BitBlaster.h b/src/to-sat/BitBlaster.h index 587c810..aab61c0 100644 --- a/src/to-sat/BitBlaster.h +++ b/src/to-sat/BitBlaster.h @@ -85,7 +85,7 @@ class BitBlaster { set& support, stack& currentColumn, vector& currentSorted, vector& priorSorted, const int minTrue = 0, const int maxTrue = ((unsigned)~0) >> 1 ); - void buildAdditionNetworkResult(stack* products, set& support, const int bitWidth, const int index, const int minTrue = 0, const int maxTrue = ((unsigned)~0) >> 1 ); + void buildAdditionNetworkResult(stack* from, stack* to, set& support, const int bitWidth, const int index, const int minTrue = 0, const int maxTrue = ((unsigned)~0) >> 1 ); vector buildAdditionNetworkResult(stack* products, set& support, int bitWidth); vector BBAndBit(const vector& y, BBNode b);