| [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 | }
|
|---|