mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +00:00
updated sat_smt
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
e9a4e486ae
commit
86310a1a27
15 changed files with 389 additions and 437 deletions
|
@ -14,9 +14,6 @@ Author:
|
|||
Nikolaj Bjorner (nbjorner) 2020-08-25
|
||||
|
||||
--*/
|
||||
#pragma once
|
||||
|
||||
|
||||
#pragma once
|
||||
#include "ast/ast.h"
|
||||
#include "ast/ast_pp.h"
|
||||
|
@ -41,19 +38,59 @@ namespace sat {
|
|||
public:
|
||||
virtual ~sat_internalizer() {}
|
||||
virtual bool is_bool_op(expr* e) const = 0;
|
||||
virtual sat::literal internalize(expr* e) = 0;
|
||||
virtual sat::bool_var add_bool_var(expr* e) = 0;
|
||||
virtual literal internalize(expr* e) = 0;
|
||||
virtual bool_var add_bool_var(expr* e) = 0;
|
||||
virtual void mk_clause(literal a, literal b) = 0;
|
||||
virtual void mk_clause(literal l1, literal l2, literal l3, bool is_lemma = false) = 0;
|
||||
virtual void cache(app* t, literal l) = 0;
|
||||
};
|
||||
|
||||
class index_base {
|
||||
extension* ex;
|
||||
class constraint_base {
|
||||
extension* m_ex;
|
||||
unsigned m_mem[0];
|
||||
static size_t ext_size() {
|
||||
return sizeof(((constraint_base*)nullptr)->m_ex);
|
||||
}
|
||||
|
||||
public:
|
||||
index_base(extension* e) : ex(e) { to_index(); }
|
||||
static extension* to_extension(size_t s) { std::cout << "to_extension: " << from_index(s) << " " << from_index(s)->ex << " " << s << "\n"; return from_index(s)->ex; }
|
||||
static index_base* from_index(size_t s) { return reinterpret_cast<index_base*>(s); }
|
||||
size_t to_index() const { std::cout << "to_index " << this << " " << ex << " " << reinterpret_cast<size_t>(this) << "\n"; return reinterpret_cast<size_t>(this); }
|
||||
constraint_base(): m_ex(nullptr) {}
|
||||
void* mem() { return m_mem; }
|
||||
|
||||
static size_t obj_size(size_t sz) {
|
||||
return ext_size() + sz;
|
||||
}
|
||||
|
||||
static extension* to_extension(size_t s) {
|
||||
return from_index(s)->m_ex;
|
||||
}
|
||||
|
||||
static constraint_base* from_index(size_t s) {
|
||||
return reinterpret_cast<constraint_base*>(s);
|
||||
}
|
||||
|
||||
size_t to_index() const {
|
||||
return reinterpret_cast<size_t>(this);
|
||||
}
|
||||
|
||||
static constraint_base const* mem2base_ptr(void const* mem) {
|
||||
return reinterpret_cast<constraint_base const*>((unsigned char const*)(mem) - ext_size());
|
||||
}
|
||||
|
||||
static constraint_base* mem2base_ptr(void* mem) {
|
||||
return reinterpret_cast<constraint_base*>((unsigned char*)(mem) - ext_size());
|
||||
}
|
||||
|
||||
static size_t mem2base(void const* mem) {
|
||||
return reinterpret_cast<size_t>(mem2base_ptr(mem));
|
||||
}
|
||||
|
||||
static void initialize(void* ptr, extension* ext) {
|
||||
reinterpret_cast<constraint_base*>(ptr)->m_ex = ext;
|
||||
}
|
||||
|
||||
static void* ptr2mem(void* ptr) {
|
||||
return reinterpret_cast<void*>(((unsigned char*) ptr) + ext_size());
|
||||
}
|
||||
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue