diff --git a/alib/src/automaton/FSM/FSM.cpp b/alib/src/automaton/FSM/FSM.cpp index 5d5804ecce35d8a5c013d1d0696632862b9e7f38..96b753a74c3315bdb0831283080860f3c1c68402 100644 --- a/alib/src/automaton/FSM/FSM.cpp +++ b/alib/src/automaton/FSM/FSM.cpp @@ -96,6 +96,34 @@ const set<TransitionFSM>& FSM::getTransitions() const { return transitions; } +const set<TransitionFSM>& FSM::getTransitionsFromState(const State& from) const { + if( states.find(from) == states.end()) + throw AutomatonException("State \"" + from.getName() + "\" doesn't exist"); + + set<TransitionFSM> transitionsFromState; + for(auto const& transition : transitions){ + if (transition.getFrom() == from){ + transitionsFromState.insert(transition); + } + } + + 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 9cbafba41637ebe358be9b1d62b4966ceefea941..3a1a91d8de1726752715285107bd0ba50010effa 100644 --- a/alib/src/automaton/FSM/FSM.h +++ b/alib/src/automaton/FSM/FSM.h @@ -67,6 +67,16 @@ public: */ const set<TransitionFSM>& getTransitions() const; + /** + * @return automaton transitions from state + */ + 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