tmp
This commit is contained in:
parent
81a2247bf2
commit
4f88c45c9e
8 changed files with 120 additions and 117 deletions
|
|
@ -27,50 +27,6 @@ namespace tp {
|
|||
auto getTransitions() const { return &mTransitions; }
|
||||
auto getStart() const { return mStart; }
|
||||
|
||||
void construct(const FiniteStateAutomation<tAlphabetType, tStateType>& automata) {
|
||||
mSymbolRange = { tAlphabetType(automata.getAlphabetRange().mBegin),
|
||||
tAlphabetType(automata.getAlphabetRange().mEnd) };
|
||||
|
||||
auto range_len = ualni(mSymbolRange.mEnd - mSymbolRange.mBegin);
|
||||
auto sizeX = range_len ? range_len : 1;
|
||||
auto sizeY = (ualni) (automata.numStates() + 1);
|
||||
|
||||
mTransitions.reserve({ sizeX, sizeY });
|
||||
mTransitions.assign(automata.numStates());
|
||||
mStates.reserve(sizeY);
|
||||
|
||||
ualni idx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
auto stateVal = state->isAccepting() ? state->getStateVal() : tNoStateVal;
|
||||
mStates[idx] = stateVal;
|
||||
idx++;
|
||||
}
|
||||
|
||||
mStates[automata.numStates()] = tFailedStateVal;
|
||||
|
||||
idx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
if (&state.data() == automata.getStartState()) {
|
||||
mStart = mIter = mIterPrev = idx;
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
ualni stateIdx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
for (auto transition : *state->getTransitions()) {
|
||||
ualni stateIdx2 = 0;
|
||||
for (auto state2 : *automata.getStates()) {
|
||||
if (transition->getState() == &state2.data()) break;
|
||||
stateIdx2++;
|
||||
}
|
||||
auto const code = transition->getSymbol();
|
||||
mTransitions.set({ (ualni) (code - mSymbolRange.mBegin), (ualni) stateIdx }, stateIdx2);
|
||||
}
|
||||
stateIdx++;
|
||||
}
|
||||
}
|
||||
|
||||
bool isTrapped() { return mStates[mIter] == tFailedStateVal; }
|
||||
|
||||
tStateType move(tAlphabetType symbol) {
|
||||
|
|
@ -112,5 +68,49 @@ namespace tp {
|
|||
mIter = mStart;
|
||||
mIterPrev = mStart;
|
||||
}
|
||||
|
||||
void construct(const FiniteStateAutomation<tAlphabetType, tStateType>& automata) {
|
||||
const auto range = automata.getAlphabetRange();
|
||||
mSymbolRange = { tAlphabetType(range.mBegin), tAlphabetType(range.mEnd) };
|
||||
|
||||
auto range_len = ualni(mSymbolRange.mEnd - mSymbolRange.mBegin);
|
||||
auto sizeX = range_len ? range_len : 1;
|
||||
auto sizeY = (ualni) (automata.numStates() + 1);
|
||||
|
||||
mTransitions.reserve({ sizeX, sizeY });
|
||||
mTransitions.assign(automata.numStates());
|
||||
mStates.reserve(sizeY);
|
||||
|
||||
ualni idx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
auto stateVal = state->isAccepting() ? state->getStateVal() : tNoStateVal;
|
||||
mStates[idx] = stateVal;
|
||||
idx++;
|
||||
}
|
||||
|
||||
mStates[automata.numStates()] = tFailedStateVal;
|
||||
|
||||
idx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
if (&state.data() == automata.getStartState()) {
|
||||
mStart = mIter = mIterPrev = idx;
|
||||
}
|
||||
idx++;
|
||||
}
|
||||
|
||||
ualni stateIdx = 0;
|
||||
for (auto state : *automata.getStates()) {
|
||||
for (auto transition : *state->getTransitions()) {
|
||||
ualni stateIdx2 = 0;
|
||||
for (auto state2 : *automata.getStates()) {
|
||||
if (transition->getState() == &state2.data()) break;
|
||||
stateIdx2++;
|
||||
}
|
||||
auto const code = transition->getSymbol();
|
||||
mTransitions.set({ (ualni) (code - mSymbolRange.mBegin), (ualni) stateIdx }, stateIdx2);
|
||||
}
|
||||
stateIdx++;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue