diff --git a/transition_machine/include/Config.hpp b/transition_machine/include/Config.hpp index a1e4a6cd5ff89ba3fbd4a5f584217b7cecfc0583..939bfff5eb92bed933464578652e2b40a00f3bda 100644 --- a/transition_machine/include/Config.hpp +++ b/transition_machine/include/Config.hpp @@ -134,7 +134,7 @@ class Config private : - const unsigned int HISTORY_SIZE = 100; + const unsigned int HISTORY_SIZE = 1000; /// @brief The name of the current state of the TransitionMachine. std::string currentStateName; /// @brief For each state of the TransitionMachine, an history of the Action that have been applied to this Config. diff --git a/transition_machine/src/Action.cpp b/transition_machine/src/Action.cpp index 32dcce80e4450105a4224e0105c9a64334f1235c..fabde9db99eb26a463ff5b263a467ea940aa6abc 100644 --- a/transition_machine/src/Action.cpp +++ b/transition_machine/src/Action.cpp @@ -32,7 +32,13 @@ void Action::undo(Config & config) for(int i = sequence.size()-1; i >= 0; i--) sequence[i].undo(config, sequence[i]); + if (ProgramParameters::debug) + fprintf(stderr, "Undoing action <%s><%s>, state history size = %d past actions size = %d...", stateName.c_str(), name.c_str(), config.getStateHistory(stateName).size(), config.pastActions.size()); + config.getStateHistory(stateName).pop(); + + if (ProgramParameters::debug) + fprintf(stderr, "done\n"); } void Action::undoOnlyStack(Config & config) @@ -49,8 +55,12 @@ void Action::undoOnlyStack(Config & config) } if (ProgramParameters::debug) - fprintf(stderr, "Undoing action <%s>, history size = %d\n", name.c_str(), config.getStateHistory(stateName).size()); + fprintf(stderr, "Undoing only stack action <%s><%s>, state history size = %d past actions size = %d...", stateName.c_str(), name.c_str(), config.getStateHistory(stateName).size(), config.pastActions.size()); + config.getStateHistory(stateName).pop(); + + if (ProgramParameters::debug) + fprintf(stderr, "done\n"); } Action::Action(const std::string & name) diff --git a/transition_machine/src/ActionBank.cpp b/transition_machine/src/ActionBank.cpp index 9306c79ff36e3cd5bf1845066579d380e5fcbd06..7a304b6fbcb19122644d3ec493ea135170327107 100644 --- a/transition_machine/src/ActionBank.cpp +++ b/transition_machine/src/ActionBank.cpp @@ -521,8 +521,7 @@ std::vector<Action::BasicAction> ActionBank::str2sequence(const std::string & na while (true) { auto a = c.pastActions.pop(); - if (ProgramParameters::debug) - fprintf(stderr, "Undoing... <%s><%s>\n", a.first.c_str(), a.second.name.c_str()); + a.second.undoOnlyStack(c); if (a.first == classifierName) @@ -543,8 +542,6 @@ std::vector<Action::BasicAction> ActionBank::str2sequence(const std::string & na exit(1); } auto a = c.pastActions.pop(); - if (ProgramParameters::debug) - fprintf(stderr, "Undoing... <%s><%s>\n", a.first.c_str(), a.second.name.c_str()); if (a.first == classifierName) { diff --git a/transition_machine/src/Config.cpp b/transition_machine/src/Config.cpp index 166a6a9ef102e4b53d2590657b0cff56bd635c9d..ebd87de9a6793fe33193e3a4e07f42a50f2f061f 100644 --- a/transition_machine/src/Config.cpp +++ b/transition_machine/src/Config.cpp @@ -5,7 +5,7 @@ #include "Action.hpp" #include "ProgramOutput.hpp" -Config::Config(BD & bd, const std::string inputFilename) : bd(bd), hashHistory(90), pastActions(100) +Config::Config(BD & bd, const std::string inputFilename) : bd(bd), hashHistory(HISTORY_SIZE), pastActions(HISTORY_SIZE) { this->outputFile = nullptr; this->stackHistory = -1; diff --git a/transition_machine/src/FeatureBank.cpp b/transition_machine/src/FeatureBank.cpp index bf8f67f9629567c5404731ada458d60b41b2a968..47d9f7a6624fcee6a498061aadd78142168603db 100644 --- a/transition_machine/src/FeatureBank.cpp +++ b/transition_machine/src/FeatureBank.cpp @@ -22,9 +22,9 @@ std::function<FeatureModel::FeatureValue(Config &)> FeatureBank::str2func(const std::string object(parts[0]); int from = std::stoi(parts[1]); int to = std::stoi(parts[2]); - if (from > to || from > 0 || to < 0) + if (from > to) { - fprintf(stderr, "ERROR (%s) : invalid feature \'%s\'. Aborting.\n", ERRINFO, s.c_str()); + fprintf(stderr, "ERROR (%s) : invalid feature \'%s\' (from=%d to=%d). Aborting.\n", ERRINFO, s.c_str(), from, to); exit(1); } std::vector<std::string> exceptions;