diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-02-21 12:15:41 +0100 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-02-21 12:15:41 +0100 |
commit | 4e6ca7760f801ce5ea16c6ea9be3ad4a86aa3b1d (patch) | |
tree | 2b6f0debe78102a24b1e1cf48cdfa14752cd0892 /kernel/satgen.h | |
parent | f778a4081c9b509c0a1d886f8668b1931bfc93d6 (diff) |
Replaced ezDefaultSAT with ezSatPtr
Diffstat (limited to 'kernel/satgen.h')
-rw-r--r-- | kernel/satgen.h | 32 |
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 { |