Finite state machine: Difference between revisions

→‎{{header|C++}}: Simplified example, minor variable renaming (for clarity)
(Made draft)
(→‎{{header|C++}}: Simplified example, minor variable renaming (for clarity))
Line 21:
database;
State
storedcurrent;
public:
finite_state_machine()
Line 30:
set(State const& state)
{
storedcurrent = state;
}
State
get() const
{
return storedcurrent;
}
void
clear()
{
database.clear();
}
void
Line 54 ⟶ 59:
{
auto const&
transitions = database[storedcurrent],
found = transitions.find(transition);
if(found == transitions.end())
return false;
auto const&
nextstate = found->second;
set(nextstate);
return true;
}
Line 80 ⟶ 85:
container.clear();
auto const&
statesfound = database.find(state);
if(statesfound == database.end())
return false;
auto const&
transitions = statesfound->second;
if(transitions.size() == 0)
return false;
for(auto const& nextiterator : transitions)
{
container.push_back(next.first);
auto const&
transition = iterator.first;
container.push_back(next.firsttransition);
}
return true;
}
Line 96 ⟶ 105:
{
return get_valid_transitions(get(), container);
}
void
clear()
{
database.clear();
}
};
Line 126 ⟶ 130:
machine.add("ready", "quit", "exit");
machine.add("ready", "deposit", "waiting");
machine.add("waiting", "selectionselect", "dispense");
machine.add("waiting", "refund", "refunding");
machine.add("dispense", "remove", "ready");
machine.add("dispense", "stuck", "refunding");
machine.add("refunding", "ready");
machine.set("ready");
Line 139 ⟶ 142:
print("Please deposit coins.");
else if(state == "waiting")
print("Please makeselect a selection!product.");
else if(state == "dispense")
print("Dispensed...please remove product from tray.");
Line 178 ⟶ 181:
[ready] Enter next transition (deposit, quit):
> deposit
Please makeselect a selection!product.
[waiting] Enter next transition (refund, selectionselect):
> selection
Dispensed...please remove product from tray.
[dispense] Enter next transition (remove, stuck):
> stuck
Refunding money...
Please deposit coins.
[ready] Enter next transition (deposit, quit):
> deposit
Please make a selection!
[waiting] Enter next transition (refund, selection):
> refund
Refunding money...
Line 195 ⟶ 188:
[ready] Enter next transition (deposit, quit):
> deposit
Please makeselect a selection!product.
[waiting] Enter next transition (refund, selectionselect):
> selectionselect
Dispensed...please remove product from tray.
[dispense] Enter next transition (remove, stuck):
> remove
Please deposit coins.
41

edits