summaryrefslogtreecommitdiff
path: root/src/theory/bv
diff options
context:
space:
mode:
authorAndres Noetzli <andres.noetzli@gmail.com>2019-12-09 11:19:10 -0800
committerGitHub <noreply@github.com>2019-12-09 11:19:10 -0800
commitb6ce0f23ce0aaa0552767e8067fe58dbceee11cb (patch)
tree0783321580ed511c7ecfa3f59363dadcee15acde /src/theory/bv
parentd06b46efade674023236da228601806daf06f1af (diff)
Make theory rewriters non-static (#3547)
This commit changes theory rewriters to be non-static. This refactoring is needed as a stepping stone to making our rewriter configurable: If we have multiple solver objects with different rewrite configurations, we cannot use `static` variables for the rewriter table in the BV rewriter for example. It is also in line with our goal of getting rid of singletons in general. Note that the `Rewriter` class is still a singleton, which will be changed in a future commit.
Diffstat (limited to 'src/theory/bv')
-rw-r--r--src/theory/bv/theory_bv_rewriter.cpp18
-rw-r--r--src/theory/bv/theory_bv_rewriter.h43
2 files changed, 22 insertions, 39 deletions
diff --git a/src/theory/bv/theory_bv_rewriter.cpp b/src/theory/bv/theory_bv_rewriter.cpp
index 6b160ea67..282ae2e27 100644
--- a/src/theory/bv/theory_bv_rewriter.cpp
+++ b/src/theory/bv/theory_bv_rewriter.cpp
@@ -29,23 +29,7 @@ using namespace CVC4;
using namespace CVC4::theory;
using namespace CVC4::theory::bv;
-
-// thread_local AllRewriteRules* TheoryBVRewriter::s_allRules = NULL;
-// thread_local TimerStat* TheoryBVRewriter::d_rewriteTimer = NULL;
-RewriteFunction TheoryBVRewriter::d_rewriteTable[kind::LAST_KIND];
-void TheoryBVRewriter::init() {
- // s_allRules = new AllRewriteRules;
- // d_rewriteTimer = new TimerStat("theory::bv::rewriteTimer");
- // smtStatisticsRegistry()->registerStat(d_rewriteTimer);
- initializeRewrites();
-
-}
-
-void TheoryBVRewriter::shutdown() {
- // delete s_allRules;
- // smtStatisticsRegistry()->unregisterStat(d_rewriteTimer);
- //delete d_rewriteTimer;
-}
+TheoryBVRewriter::TheoryBVRewriter() { initializeRewrites(); }
RewriteResponse TheoryBVRewriter::preRewrite(TNode node) {
RewriteResponse res = d_rewriteTable[node.getKind()](node, true);
diff --git a/src/theory/bv/theory_bv_rewriter.h b/src/theory/bv/theory_bv_rewriter.h
index bf707c268..8c8b7846c 100644
--- a/src/theory/bv/theory_bv_rewriter.h
+++ b/src/theory/bv/theory_bv_rewriter.h
@@ -20,7 +20,7 @@
#ifndef CVC4__THEORY__BV__THEORY_BV_REWRITER_H
#define CVC4__THEORY__BV__THEORY_BV_REWRITER_H
-#include "theory/rewriter.h"
+#include "theory/theory_rewriter.h"
#include "util/statistics_registry.h"
namespace CVC4 {
@@ -30,14 +30,27 @@ namespace bv {
struct AllRewriteRules;
typedef RewriteResponse (*RewriteFunction) (TNode, bool);
-class TheoryBVRewriter {
+class TheoryBVRewriter : public TheoryRewriter
+{
+ public:
+ /**
+ * Temporary hack for devision-by-zero until we refactor theory code from
+ * smt engine.
+ *
+ * @param node
+ *
+ * @return
+ */
+ static Node eliminateBVSDiv(TNode node);
- static RewriteFunction d_rewriteTable[kind::LAST_KIND];
+ TheoryBVRewriter();
+ RewriteResponse postRewrite(TNode node) override;
+ RewriteResponse preRewrite(TNode node) override;
+
+ private:
static RewriteResponse IdentityRewrite(TNode node, bool prerewrite = false);
static RewriteResponse UndefinedRewrite(TNode node, bool prerewrite = false);
-
- static void initializeRewrites();
static RewriteResponse RewriteEqual(TNode node, bool prerewrite = false);
static RewriteResponse RewriteUlt(TNode node, bool prerewrite = false);
@@ -86,24 +99,10 @@ class TheoryBVRewriter {
static RewriteResponse RewriteBVToNat(TNode node, bool prerewrite = false);
static RewriteResponse RewriteIntToBV(TNode node, bool prerewrite = false);
-public:
+ void initializeRewrites();
- static RewriteResponse postRewrite(TNode node);
-
- static RewriteResponse preRewrite(TNode node);
-
- static void init();
- static void shutdown();
- /**
- * Temporary hack for devision-by-zero until we refactor theory code from
- * smt engine.
- *
- * @param node
- *
- * @return
- */
- static Node eliminateBVSDiv(TNode node);
-};/* class TheoryBVRewriter */
+ RewriteFunction d_rewriteTable[kind::LAST_KIND];
+}; /* class TheoryBVRewriter */
}/* CVC4::theory::bv namespace */
}/* CVC4::theory namespace */
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback