[10] | 1 | // /********************************************************************* |
---|
| 2 | // Copyright 2000-2004, Princeton University. All rights reserved. |
---|
| 3 | // By using this software the USER indicates that he or she has read, |
---|
| 4 | // understood and will comply with the following: |
---|
| 5 | // |
---|
| 6 | // --- Princeton University hereby grants USER nonexclusive permission |
---|
| 7 | // to use, copy and/or modify this software for internal, noncommercial, |
---|
| 8 | // research purposes only. Any distribution, including commercial sale |
---|
| 9 | // or license, of this software, copies of the software, its associated |
---|
| 10 | // documentation and/or modifications of either is strictly prohibited |
---|
| 11 | // without the prior consent of Princeton University. Title to copyright |
---|
| 12 | // to this software and its associated documentation shall at all times |
---|
| 13 | // remain with Princeton University. Appropriate copyright notice shall |
---|
| 14 | // be placed on all software copies, and a complete copy of this notice |
---|
| 15 | // shall be included in all copies of the associated documentation. |
---|
| 16 | // No right is granted to use in advertising, publicity or otherwise |
---|
| 17 | // any trademark, service mark, or the name of Princeton University. |
---|
| 18 | // |
---|
| 19 | // |
---|
| 20 | // --- This software and any associated documentation is provided "as is" |
---|
| 21 | // |
---|
| 22 | // PRINCETON UNIVERSITY MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS |
---|
| 23 | // OR IMPLIED, INCLUDING THOSE OF MERCHANTABILITY OR FITNESS FOR A |
---|
| 24 | // PARTICULAR PURPOSE, OR THAT USE OF THE SOFTWARE, MODIFICATIONS, OR |
---|
| 25 | // ASSOCIATED DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, |
---|
| 26 | // TRADEMARKS OR OTHER INTELLECTUAL PROPERTY RIGHTS OF A THIRD PARTY. |
---|
| 27 | // |
---|
| 28 | // Princeton University shall not be liable under any circumstances for |
---|
| 29 | // any direct, indirect, special, incidental, or consequential damages |
---|
| 30 | // with respect to any claim by USER or any third party on account of |
---|
| 31 | // or arising from the use, or inability to use, this software or its |
---|
| 32 | // associated documentation, even if Princeton University has been advised |
---|
| 33 | // of the possibility of those damages. |
---|
| 34 | // *********************************************************************/ |
---|
| 35 | |
---|
| 36 | #include <iostream> |
---|
| 37 | #include <vector> |
---|
| 38 | |
---|
| 39 | using namespace std; |
---|
| 40 | |
---|
| 41 | #include "zchaff_base.h" |
---|
| 42 | |
---|
| 43 | void CLitPoolElement::dump(ostream & os) { |
---|
| 44 | os << (var_sign() ? " -" : " +") << var_index(); |
---|
| 45 | if (is_watched()) |
---|
| 46 | os << "*"; |
---|
| 47 | } |
---|
| 48 | |
---|
| 49 | void CClause::dump(ostream & os) { |
---|
| 50 | if (status() == DELETED_CL) |
---|
| 51 | os << "\t\t\t======removed====="; |
---|
| 52 | for (int i = 0, sz = num_lits(); i < sz; ++i) |
---|
| 53 | os << literal(i); |
---|
| 54 | os << endl; |
---|
| 55 | } |
---|
| 56 | |
---|
| 57 | bool CClause::self_check(void) { |
---|
| 58 | assert(num_lits() > 0); |
---|
| 59 | int watched = 0; |
---|
| 60 | for (unsigned i = 0; i < num_lits(); ++i) { |
---|
| 61 | assert(literal(i).is_literal()); |
---|
| 62 | if (literal(i).is_watched()) |
---|
| 63 | ++watched; |
---|
| 64 | } |
---|
| 65 | assert(num_lits() ==1 || watched == 2); // either unit, or have two watched |
---|
| 66 | assert(!literal(num_lits() + 1).is_literal()); |
---|
| 67 | return true; |
---|
| 68 | } |
---|
| 69 | |
---|
| 70 | bool CVariable::self_check(void) { |
---|
| 71 | for (unsigned i = 0; i < 2; ++i) { |
---|
| 72 | vector<CLitPoolElement*>& w = watched(i); |
---|
| 73 | for (unsigned j = 0; j < w.size(); ++j) { |
---|
| 74 | assert(w[j]->is_watched()); |
---|
| 75 | assert((unsigned)w[j]->var_sign() == i); |
---|
| 76 | } |
---|
| 77 | } |
---|
| 78 | return true; |
---|
| 79 | } |
---|
| 80 | |
---|
| 81 | void CVariable::dump(ostream & os) { |
---|
| 82 | if (is_marked()) |
---|
| 83 | os << "*" ; |
---|
| 84 | os << "V: " << _value << " DL: " << _dlevel << " POS: "<< _assgn_stack_pos |
---|
| 85 | << " Ante: " << _antecedent << endl; |
---|
| 86 | for (unsigned j = 0; j < 2; ++j) { |
---|
| 87 | os << (j == 0 ? "WPos " : "WNeg ") << "(" ; |
---|
| 88 | for (unsigned i = 0; i < watched(j).size(); ++i) |
---|
| 89 | os << watched(j)[i]->find_clause_index() << " " ; |
---|
| 90 | os << ")" << endl; |
---|
| 91 | } |
---|
| 92 | #ifdef KEEP_LIT_CLAUSES |
---|
| 93 | for (unsigned j = 0; j < 2; ++j) { |
---|
| 94 | os << (j == 0 ? "Pos " : "Neg ") << "(" ; |
---|
| 95 | for (unsigned i = 0; i < lit_clause(j).size(); ++i) |
---|
| 96 | os << lit_clause(j)[i] << " " ; |
---|
| 97 | os << ")" << endl; |
---|
| 98 | } |
---|
| 99 | #endif |
---|
| 100 | os << endl; |
---|
| 101 | } |
---|