3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-11 03:33:35 +00:00
z3/lib/smt_bool_var_data.h
Leonardo de Moura e9eab22e5c Z3 sources
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:35:25 -07:00

129 lines
3.6 KiB
C++

/*++
Copyright (c) 2006 Microsoft Corporation
Module Name:
smt_bool_var_data.h
Abstract:
<abstract>
Author:
Leonardo de Moura (leonardo) 2008-02-25.
Revision History:
--*/
#ifndef _SMT_BOOL_VAR_DATA_H_
#define _SMT_BOOL_VAR_DATA_H_
#include"smt_b_justification.h"
namespace smt {
struct bool_var_data {
b_justification m_justification;
unsigned m_scope_lvl:24; //!< scope level of when the variable was assigned.
unsigned m_mark:1;
unsigned m_assumption:1;
unsigned m_phase_available:1;
unsigned m_phase:1;
private:
unsigned m_eq:1;
unsigned m_true_first:1; //!< If True, when case splitting try the true phase first. Otherwise, you default phase selection heuristic.
unsigned m_enode:1; //!< has enode associated with it.
unsigned m_quantifier:1; //!< true if bool var is attached to a quantifier
unsigned m_iscope_lvl:23; //!< scope level of when the variable was internalized.
unsigned m_atom:1; //!< logical or of m_eq, m_enode, m_quantifier, and m_notify_theory != 0
unsigned m_notify_theory:8;
void update_atom_flag() {
m_atom = m_eq || m_notify_theory != 0 || m_quantifier || m_enode;
}
public:
unsigned get_intern_level() const { return m_iscope_lvl; }
bool is_atom() const { return m_atom; }
theory_id get_theory() const {
return m_notify_theory == 0 ? null_theory_id : static_cast<theory_id>(m_notify_theory);
}
bool is_theory_atom() const { return m_notify_theory != 0; }
void set_notify_theory(theory_id thid) {
SASSERT(thid > 0 && thid <= 255);
m_notify_theory = thid;
m_atom = true;
}
void reset_notify_theory() {
m_notify_theory = 0;
update_atom_flag();
}
bool is_enode() const { return m_enode; }
void set_enode_flag() {
m_enode = true;
m_atom = true;
}
void reset_enode_flag() {
m_enode = false;
update_atom_flag();
}
bool is_quantifier() const { return m_quantifier; }
void set_quantifier_flag() {
m_quantifier = true;
m_atom = true;
}
bool is_eq() const { return m_eq; }
void set_eq_flag() {
m_eq = true;
m_atom = true;
}
void reset_eq_flag() {
m_eq = false;
update_atom_flag();
}
bool try_true_first() const { return m_true_first; }
void set_true_first_flag() {
m_true_first = true;
}
void reset_true_first_flag() {
m_true_first = false;
}
void init(unsigned iscope_lvl) {
m_justification = null_b_justification;
m_scope_lvl = 0;
m_mark = false;
m_assumption = false;
m_phase_available = false;
m_phase = false;
m_iscope_lvl = iscope_lvl;
m_eq = false;
m_true_first = false;
m_notify_theory = 0;
m_enode = false;
m_quantifier = false;
m_atom = false;
}
};
};
#endif /* _SMT_BOOL_VAR_DATA_H_ */