From 098d35c519349bdb2b4eb2f400cc533d40fd1aa6 Mon Sep 17 00:00:00 2001 From: Jakob Rath Date: Wed, 7 Feb 2024 15:23:10 +0100 Subject: [PATCH] Add types to track additional info with fixed sub slices --- src/sat/smt/polysat/types.h | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/sat/smt/polysat/types.h b/src/sat/smt/polysat/types.h index 39d30468a..c8a8a386a 100644 --- a/src/sat/smt/polysat/types.h +++ b/src/sat/smt/polysat/types.h @@ -40,19 +40,21 @@ namespace polysat { unsigned length = 0; rational value; fixed_slice() = default; - fixed_slice(rational value, unsigned offset, unsigned length) : offset(offset), length(length), value(value) {} + fixed_slice(rational value, unsigned offset, unsigned length) : offset(offset), length(length), value(std::move(value)) {} }; struct fixed_claim : public fixed_slice { pvar v; fixed_claim() = default; - fixed_claim(pvar v, rational value, unsigned offset, unsigned length) : fixed_slice(value, offset, length), v(v) {} + fixed_claim(pvar v, rational value, unsigned offset, unsigned length) : fixed_slice(std::move(value), offset, length), v(v) {} fixed_claim(pvar v, fixed_slice const& s) : fixed_slice(s), v(v) {} }; struct offset_slice { pvar v; unsigned offset; + offset_slice() = default; + offset_slice(pvar v, unsigned offset) : v(v), offset(offset) {} }; struct offset_claim : public offset_slice { @@ -118,6 +120,22 @@ namespace polysat { using fixed_bits_vector = vector; + struct fixed_slice_extra : public fixed_slice { + unsigned level = 0; // level when sub-slice was fixed to value + dependency dep = null_dependency; + fixed_slice_extra() = default; + fixed_slice_extra(rational value, unsigned offset, unsigned length, unsigned level, dependency dep): + fixed_slice(std::move(value), offset, length), level(level), dep(std::move(dep)) {} + }; + using fixed_slice_extra_vector = vector; + + struct offset_slice_extra : public offset_slice { + unsigned level = 0; // level when variable was fixed to value + offset_slice_extra() = default; + offset_slice_extra(pvar v, unsigned offset, unsigned level) : offset_slice(v, offset), level(level) {} + }; + using offset_slice_extra_vector = vector; + using dependency_vector = vector; using constraint_or_dependency = std::variant; using constraint_id_or_constraint = std::variant;