TFiniteAutomaton& TFiniteAutomaton::Iterate() { // FIXME: expected exactly one final state const size_t mySize = Size(), myFinal = *FinalStates.begin(); Resize(mySize + 2); AddTransition(mySize, StartState); AddTransition(myFinal, mySize + 1); AddTransition(myFinal, StartState); AddTransition(mySize, mySize + 1); SetStartState(mySize); SetFinalState(myFinal, false); SetFinalState(mySize + 1); return *this; }
TFiniteAutomaton& TFiniteAutomaton::operator += (const TFiniteAutomaton& rhs) { // FIXME: expected exactly one final state const size_t mySize = Size(), myFinal = *FinalStates.begin(); Import(rhs); // import final states along with transitions AddTransition(myFinal, mySize + rhs.StartState); SetFinalState(myFinal, false); return *this; }
TFiniteAutomaton& TFiniteAutomaton::operator |= (const TFiniteAutomaton& rhs) { // FIXME: expected exactly one final state from both the automata const size_t mySize = Size(), myFinal = *FinalStates.begin(); Import(rhs); const size_t newSize = Size(); Resize(newSize + 2); AddTransition(newSize, StartState); AddTransition(newSize, mySize + rhs.StartState); AddTransition(myFinal, newSize + 1); AddTransition(mySize + *rhs.FinalStates.begin(), newSize + 1); SetStartState(newSize); SetFinalState(myFinal, false); SetFinalState(mySize + *rhs.FinalStates.begin(), false); SetFinalState(newSize + 1); return *this; }
int CreateQueue() { SetFinalState(); if (!(myQueue = (Queue*)malloc(sizeof(Queue)))){ printf("%s\n", "Creation of the Queue has failed!"); return 0; } myQueue->numberOfElements = 0; myQueue->firstState = NULL; myQueue->queueHead = NULL; myMode = GREEDY; return 1; }