diff --git a/alib/src/automaton/FSM/FSM.cpp b/alib/src/automaton/FSM/FSM.cpp index c5cc8eb432b67cd423ec47706202cbe04a26ceed..96b753a74c3315bdb0831283080860f3c1c68402 100644 --- a/alib/src/automaton/FSM/FSM.cpp +++ b/alib/src/automaton/FSM/FSM.cpp @@ -110,6 +110,20 @@ const set<TransitionFSM>& FSM::getTransitionsFromState(const State& from) const return transitions; } +const set<TransitionFSM>& FSM::getTransitionsToState(const State& to) const { + if( states.find(to) == states.end()) + throw AutomatonException("State \"" + to.getName() + "\" doesn't exist"); + + set<TransitionFSM> transitionsToState; + for(auto const& transition : transitions){ + if (transition.getTo() == to){ + transitionsToState.insert(transition); + } + } + + return transitions; +} + void FSM::toXML(ostream& out) const { AutomatonPrinter::toXML(*this, out); } diff --git a/alib/src/automaton/FSM/FSM.h b/alib/src/automaton/FSM/FSM.h index a89dc40cf137393fb0ea6402d9204eea429d97df..3a1a91d8de1726752715285107bd0ba50010effa 100644 --- a/alib/src/automaton/FSM/FSM.h +++ b/alib/src/automaton/FSM/FSM.h @@ -72,6 +72,11 @@ public: */ const set<TransitionFSM>& getTransitionsFromState(const State& from) const; + /** + * @return automaton transitions from state + */ + const set<TransitionFSM>& getTransitionsToState(const State& to) const; + /** * Determines whether FSM contains epsilon transitions. * @return true when automaton doesn't contain epsilon transitions, false otherwise