This commit is contained in:
Artur Meski
2018-03-03 21:55:43 +00:00
parent c853e40ad7
commit cf8c5df9ea
2 changed files with 108 additions and 0 deletions

63
ctx_aut.cc Normal file
View File

@@ -0,0 +1,63 @@
#include "ctx_aut.hh"
bool CtxAut::hasState(std::string name)
{
if (states_names.find(name) == states_names.end())
return false;
else
return true;
}
State CtxAut::getStateID(std::string name)
{
if (!hasState(name))
{
FERROR("No such state: " << name);
}
return states_names[name];
}
void CtxAut::addState(std::string name)
{
if (!hasState(name))
{
State new_state_id = states_ids.size();
VERB_L2("Adding state: " << name << " index=" << new_state_id);
states_ids.push_back(name);
states_names[name] = new_state_id;
}
}
void CtxAut::printAutomaton(void)
{
showStates();
}
void CtxAut::showStates(void)
{
cout << "# Context Automaton States:" << endl;
for (const auto &s : states_ids)
cout << " * " << s << endl;
}
void CtxAut::pushContextEntity(Entity entity_id)
{
tmpEntities.insert(entity_id);
}
void CtxAut::addTransition(std::string srcStateName, std::string dstStateName)
{
VERB_L3("Saving transition");
Transition new_transition;
new_transition.src_state = getStateID(srcStateName);
new_transition.ctx = tmpEntities;
tmpEntities.clear();
new_transition.dst_state = getStateID(dstStateName);
}
/** EOF **/

45
ctx_aut.hh Normal file
View File

@@ -0,0 +1,45 @@
/*
Copyright (c) 2018
Artur Meski <meski@ipipan.waw.pl>
Reuse of the code or its part for any purpose
without the author's permission is strictly prohibited.
*/
#ifndef RS_CTX_AUT_HH
#define RS_CTX_AUT_HH
#include <iostream>
#include <set>
#include <map>
#include <vector>
#include <string>
#include <cstdlib>
#include "types.hh"
#include "macro.hh"
#include "options.hh"
using std::cout;
using std::endl;
class CtxAut
{
public:
CtxAut(Options *opts) { setOptions(opts); }
bool hasState(std::string name);
void addState(std::string stateName);
State getStateID(std::string name);
void printAutomaton(void);
void showStates(void);
void addTransition(std::string srcStateName, std::string dstStateName);
void pushContextEntity(Entity entity_id);
void setOptions(Options *opts) { this->opts = opts; }
private:
Options *opts;
StatesById states_ids;
StatesByName states_names;
Entities tmpEntities;
};
#endif /* RS_CTX_AUT_HH */