From f66d83848a1a76defa06a7f6311b8e7fc75ece77 Mon Sep 17 00:00:00 2001
From: Franck Dary <franck.dary@lis-lab.fr>
Date: Tue, 22 Oct 2019 16:12:08 +0200
Subject: [PATCH] Fixed morpho

---
 transition_machine/src/ActionBank.cpp | 5 ++++-
 transition_machine/src/Oracle.cpp     | 7 +++++--
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/transition_machine/src/ActionBank.cpp b/transition_machine/src/ActionBank.cpp
index 7412163..b8affab 100644
--- a/transition_machine/src/ActionBank.cpp
+++ b/transition_machine/src/ActionBank.cpp
@@ -186,7 +186,7 @@ Action::BasicAction ActionBank::bufferAdd(std::string tapeName, std::string valu
       auto & tape = config.getTape(tapeName);
       auto & from = tape.getHyp(relativeIndex);
 
-      auto parts = util::split(from, '|');
+      auto parts = from.empty() ? std::vector<std::string>() : util::split(from, '|');
       parts.emplace_back(value);
 
       std::sort(parts.begin(), parts.end());
@@ -218,6 +218,9 @@ Action::BasicAction ActionBank::bufferAdd(std::string tapeName, std::string valu
       auto & tape = config.getTape(tapeName);
       auto & from = tape.getHyp(relativeIndex);
 
+      if (from.empty())
+        return true;
+
       auto splited = util::split(from, '|');
       for (auto & part : splited)
         if (part == value)
diff --git a/transition_machine/src/Oracle.cpp b/transition_machine/src/Oracle.cpp
index 8d90e07..f9f723b 100644
--- a/transition_machine/src/Oracle.cpp
+++ b/transition_machine/src/Oracle.cpp
@@ -289,8 +289,11 @@ void Oracle::createDatabase()
     if (!strncmp("WRITE", action.c_str(), 5))
       return action == "WRITE b.0 MORPHO " + c.getTape("MORPHO").getRef(0) ? 0 : 1;
 
-    auto partsRef = util::split(c.getTape("MORPHO").getRef(0), '|');
-    auto partsHyp = util::split(c.getTape("MORPHO").getHyp(0), '|');
+    auto & hypMorpho = c.getTape("MORPHO").getHyp(0);
+    auto & refMorpho = c.getTape("MORPHO").getRef(0);
+
+    auto partsRef = refMorpho.empty() ? std::vector<std::string>() : util::split(refMorpho, '|');
+    auto partsHyp = hypMorpho.empty() ? std::vector<std::string>() : util::split(hypMorpho, '|');
 
     if (!strncmp("NOTHING", action.c_str(), 7))
     {
-- 
GitLab