9 #ifndef __DIADES__AUTOMATA__EXPERIMENTAL__AUTFILE__HH__ 10 #define __DIADES__AUTOMATA__EXPERIMENTAL__AUTFILE__HH__ 14 #include <unordered_set> 29 namespace Experimental
53 template<
typename Fsm>
57 std::vector<char> in(fsm.numberOfStates());
58 std::fill(in.begin(), in.end(),
'o');
59 std::for_each(fsm.stateBegin(), fsm.stateEnd(), [&](
typename Fsm::State s)
61 auto sInfo = fsm.getStatePropertyId(s);
67 return std::find(in.begin(), in.end(),
'o') != in.end();
77 template<
typename Fsm>
81 encoding.
init(fsm.behaviour());
83 bool initialStateEncoded =
false;
84 std::for_each(fsm.stateBegin(), fsm.stateEnd(),
87 if(fsm.isInitial(s) && !initialStateEncoded)
90 initialStateEncoded =
true;
107 template<
typename Fsm>
114 std::for_each(fsm.stateBegin(), fsm.stateEnd(),
117 auto s1 = fsm.getState(encoding[s]);
120 fsm.setStatePropertyId(s1,fsm.nullStatePropertyId);
122 fsm.setStatePropertyId(s,encoding[s]);
217 virtual std::pair<State, bool>
268 template<
typename AutFsmRange>
275 std::list<AutFsmEventInserter> evtInserters;
276 std::list<StateCopy < AutFsm>> stateCopies;
277 std::list<AutFsmStateInserter> stateInserters;
280 std::list<AutFsmTransitionInserter> tInserters;
282 std::for_each(range.begin(), range.end(),
285 evtInserters.emplace_back(fsm, output);
286 stateCopies.emplace_back(fsm, output);
287 stateInserters.emplace_back(gen, stateCopies.back());
288 tInserters.emplace_back(stateInserters.back(),evtInserters.back());
300 std::list<AutFsm::State> statesToRemove;
307 if(output.
isInitial(transition.target()))
319 if(!output.
isInitial(transition.source()))
325 statesToRemove.push_back(*it);
328 deleteState(output,statesToRemove.begin(),statesToRemove.end());
unsigned numberOfInitialStates() const
Transition newTransition(State source, State target, const EventPropertyId &event)
Diades::Graph::Edge Transition
FaultyEventStateMachine< CandidateId, EventInfoId > Fsm
const Fsm & source() const
typename OSC::FsmBs FsmBs
void deleteState(StateMachine< StatePropertyId, EventPropertyId, NullStateProperty, NullEventProperty > &m, InputIterator first, InputIterator last)
Diades::Graph::Node State
OutputTransitionIterator outputTransitionBegin(State s) const
AutStateCreator(const AutFsm &source, AutFsm &target)
InitialStateIterator initialStateEnd() const
InputTransitionIterator inputTransitionBegin(State s) const
typename OSC::State State
void autFileStateEncoding(const Fsm &fsm, Diades::Graph::ConstNodeMap< AutStateId > &encoding)
void insertRangeOfTransitions(TransInserterIterator begin, TransInserterIterator end)
const Fsm & target() const
StatePropertyIdAsSizeT AutStateId
bool insertAutFsms(AutFsmRange range, AutFsm &output)
const EventPropertyId & getEvent(Transition t) const
Namespace of the Diades project.
OutputTransitionIterator outputTransitionEnd(State s) const
unsigned numberOfStates() const
InputTransitionIterator inputTransitionEnd(State s) const
bool autFsmNeedEncoding(const Fsm &fsm)
bool toAutFile(ostream &stream, const AutFsm &fsm, bool enforce=false)
InitialStateIterator initialStateBegin() const
typename BSBSC::FsmBs FsmBs
void autFileStateReencoding(Fsm &fsm)
bool fromAutFile(std::istream &stream, AutFsm &fsm)
size_t StatePropertyIdAsSizeT
virtual std::pair< State, bool > newState(const FsmBs &bs)
void init(const Graph &g, SizeType capacity=0, ValueType dflt=ValueType())
bool isInitial(State state) const