#pragma once
#include "util/sat_literal.h"
namespace sat {
struct clause_info {
clause_info(unsigned n, literal const* lits, double init_weight): m_weight(init_weight), m_clause(n, lits) {}
double m_weight; unsigned m_trues = 0; unsigned m_num_trues = 0; literal_vector m_clause;
literal const* begin() const { return m_clause.begin(); }
literal const* end() const { return m_clause.end(); }
bool is_true() const { return m_num_trues > 0; }
void add(literal lit) { ++m_num_trues; m_trues += lit.index(); }
void del(literal lit) { SASSERT(m_num_trues > 0); --m_num_trues; m_trues -= lit.index(); }
};
inline std::ostream& operator<<(std::ostream& out, clause_info const& ci) {
return out << ci.m_clause << " w: " << ci.m_weight << " nt: " << ci.m_num_trues;
}
}