mirror of
https://github.com/Z3Prover/z3
synced 2025-05-08 16:25:48 +00:00
checkpoint
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
4722fdfca5
commit
add684d8e9
377 changed files with 204 additions and 62 deletions
128
src/smt/smt_bool_var_data.h
Normal file
128
src/smt/smt_bool_var_data.h
Normal file
|
@ -0,0 +1,128 @@
|
|||
/*++
|
||||
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_ */
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue