diff --git a/transition_machine/src/ActionBank.cpp b/transition_machine/src/ActionBank.cpp index 74121631d886add7b22afc823103d7790fcaba3e..b8affab8ec818584431de065b468c9b99a5fb01f 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 8d90e0766a7d5bf88c94f7eeb53254252065620f..f9f723b433fe1b5dc310d73cd653abb915e095fa 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)) {