From 7f9a3874ca5e01c254b0e46c42a61a52b9734ae6 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Mon, 26 Nov 2012 15:46:45 +0100
Subject: [PATCH] Implement --firstonly for new dotconverter

---
 src/main/scala/leon/synthesis/Synthesizer.scala        |  2 +-
 src/main/scala/leon/synthesis/search/AndOrGraph.scala  |  6 +++---
 .../leon/synthesis/search/AndOrGraphDotConverter.scala | 10 ++++++++--
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/main/scala/leon/synthesis/Synthesizer.scala b/src/main/scala/leon/synthesis/Synthesizer.scala
index a5e11bfb1..51444a16b 100644
--- a/src/main/scala/leon/synthesis/Synthesizer.scala
+++ b/src/main/scala/leon/synthesis/Synthesizer.scala
@@ -59,7 +59,7 @@ class Synthesizer(val reporter: Reporter,
     reporter.info("Finished in "+diff+"ms")
 
     if (generateDerivationTrees) {
-      new AndOrGraphDotConverter(search.g).writeFile("derivation.dot")
+      new AndOrGraphDotConverter(search.g, firstOnly).writeFile("derivation.dot")
     }
 
     res.getOrElse(Solution.choose(problem))
diff --git a/src/main/scala/leon/synthesis/search/AndOrGraph.scala b/src/main/scala/leon/synthesis/search/AndOrGraph.scala
index 1f3226535..297c10fa7 100644
--- a/src/main/scala/leon/synthesis/search/AndOrGraph.scala
+++ b/src/main/scala/leon/synthesis/search/AndOrGraph.scala
@@ -123,9 +123,9 @@ class AndOrGraph[AT <: AOAndTask[S], OT <: AOOrTask[S], S <: AOSolution](val roo
 
 
   class OrNode(val parent: AndNode, var alternatives: Map[AT, AndTree], val task: OT) extends OrTree with Node[AndTree] {
-    var triedAlternatives    = Map[AT, AndTree]()
-    var minAlternative: Tree = _
-    var minCost              = task.cost
+    var triedAlternatives       = Map[AT, AndTree]()
+    var minAlternative: AndTree = _
+    var minCost                 = task.cost
 
     def updateMin() {
       if (!alternatives.isEmpty) {
diff --git a/src/main/scala/leon/synthesis/search/AndOrGraphDotConverter.scala b/src/main/scala/leon/synthesis/search/AndOrGraphDotConverter.scala
index fb42a6427..8e8da90a5 100644
--- a/src/main/scala/leon/synthesis/search/AndOrGraphDotConverter.scala
+++ b/src/main/scala/leon/synthesis/search/AndOrGraphDotConverter.scala
@@ -3,7 +3,7 @@ package leon.synthesis.search
 
  class AndOrGraphDotConverter[AT <: AOAndTask[S],
                               OT <: AOOrTask[S],
-                              S <: AOSolution](val g: AndOrGraph[AT, OT, S]) {
+                              S <: AOSolution](val g: AndOrGraph[AT, OT, S], firstOnly: Boolean) {
 
 
   private[this] var _nextID = 0
@@ -65,7 +65,13 @@ package leon.synthesis.search
             collect(sub, wasMin)
           }
         case on : g.OrNode =>
-          for (sub <- (on.alternatives ++ on.triedAlternatives).values) {
+          val alternatives:Traversable[g.AndTree] = if (firstOnly) {
+            Option(on.minAlternative)
+          } else {
+            on.alternatives.values
+          }
+
+          for (sub <- alternatives) {
             val isMin = sub == on.minAlternative
             edges += ((n, sub, isMin))
             collect(sub, isMin)
-- 
GitLab