Queueing up asserted literals in the proxy instead of sending them off to the theory...
authorDejan Jovanović <dejan.jovanovic@gmail.com>
Thu, 17 May 2012 04:34:03 +0000 (04:34 +0000)
committerDejan Jovanović <dejan.jovanovic@gmail.com>
Thu, 17 May 2012 04:34:03 +0000 (04:34 +0000)
src/prop/theory_proxy.cpp
src/prop/theory_proxy.h

index 53afce35efed3c684e28a27339f867d1bc57fbbc..7366afcafbb56659a5d14f1527a8a052babd92f3 100644 (file)
@@ -35,6 +35,11 @@ void TheoryProxy::variableNotify(SatVariable var) {
 }
 
 void TheoryProxy::theoryCheck(theory::Theory::Effort effort) {
+  while (!d_queue.empty()) {
+    TNode assertion = d_queue.front();
+    d_queue.pop();
+    d_theoryEngine->assertFact(assertion);
+  }
   d_theoryEngine->check(effort);
 }
 
@@ -70,7 +75,7 @@ void TheoryProxy::enqueueTheoryLiteral(const SatLiteral& l) {
   Node literalNode = d_cnfStream->getNode(l);
   Debug("prop") << "enqueueing theory literal " << l << " " << literalNode << std::endl;
   Assert(!literalNode.isNull());
-  d_theoryEngine->assertFact(literalNode);
+  d_queue.push(literalNode);
 }
 
 SatLiteral TheoryProxy::getNextDecisionRequest(bool &stopSearch) {
index f3fe634e2a167b4727ef7d5a512ef2285f25df33..2fac0ab7b1d2d37b8efe6f3071a79399898bc362 100644 (file)
@@ -29,6 +29,8 @@
 #include "util/options.h"
 #include "util/stats.h"
 
+#include "context/cdqueue.h"
+
 #include "prop/sat_solver.h"
 
 namespace CVC4 {
@@ -61,6 +63,9 @@ class TheoryProxy {
   /** Context we will be using to synchronzie the sat solver */
   context::Context* d_context;
 
+  /** Queue of asserted facts */
+  context::CDQueue<TNode> d_queue;
+
   /**
    * Set of all lemmas that have been "shared" in the portfolio---i.e.,
    * all imported and exported lemmas.
@@ -127,7 +132,8 @@ inline TheoryProxy::TheoryProxy(PropEngine* propEngine,
   d_cnfStream(cnfStream),
   d_decisionEngine(decisionEngine),
   d_theoryEngine(theoryEngine),
-  d_context(context)
+  d_context(context),
+  d_queue(context)
 {}
 
 }/* CVC4::prop namespace */