summaryrefslogtreecommitdiff
path: root/kernel/satgen.h
diff options
context:
space:
mode:
authorClifford Wolf <clifford@clifford.at>2015-02-21 12:15:41 +0100
committerClifford Wolf <clifford@clifford.at>2015-02-21 12:15:41 +0100
commit4e6ca7760f801ce5ea16c6ea9be3ad4a86aa3b1d (patch)
tree2b6f0debe78102a24b1e1cf48cdfa14752cd0892 /kernel/satgen.h
parentf778a4081c9b509c0a1d886f8668b1931bfc93d6 (diff)
Replaced ezDefaultSAT with ezSatPtr
Diffstat (limited to 'kernel/satgen.h')
-rw-r--r--kernel/satgen.h32
1 files changed, 31 insertions, 1 deletions
diff --git a/kernel/satgen.h b/kernel/satgen.h
index 2f5efe67..093d248d 100644
--- a/kernel/satgen.h
+++ b/kernel/satgen.h
@@ -29,7 +29,37 @@
YOSYS_NAMESPACE_BEGIN
-typedef ezMiniSAT ezDefaultSAT;
+// defined in kernel/register.cc
+extern struct SatSolver *yosys_satsolver_list;
+extern struct SatSolver *yosys_satsolver;
+
+struct SatSolver
+{
+ string name;
+ SatSolver *next;
+ virtual ezSAT *create() = 0;
+
+ SatSolver(string name) : name(name) {
+ next = yosys_satsolver_list;
+ yosys_satsolver_list = this;
+ }
+
+ virtual ~SatSolver() {
+ auto p = &yosys_satsolver_list;
+ while (*p) {
+ if (*p == this)
+ *p = next;
+ else
+ p = &(*p)->next;
+ }
+ if (yosys_satsolver == this)
+ yosys_satsolver = yosys_satsolver_list;
+ }
+};
+
+struct ezSatPtr : public std::unique_ptr<ezSAT> {
+ ezSatPtr() : unique_ptr<ezSAT>(yosys_satsolver->create()) { }
+};
struct SatGen
{