Finite state machines
- Java 99.4%
- CSS 0.6%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| .forgejo | ||
| com.io7m.jfsm.core | ||
| com.io7m.jfsm.tests | ||
| src/site/resources | ||
| .gitignore | ||
| .gitmodules | ||
| doc7m-books.json | ||
| pom.xml | ||
| README-CHANGES.xml | ||
| README-LICENSE.txt | ||
| README.in | ||
| README.md | ||
jfsm
jfsm
The jfsm package provides implementations of finite state machines.
Features
- Mutable enum-based finite state machines.
- Written in pure Java 17.
- High coverage test suite.
- OSGi-ready.
- JPMS-ready.
- ISC license.
Usage
Declare a type that will be used to represent the states of the FSM.
An enum type or a sealed hierarchy is a good choice.
enum TrafficLight
{
RED,
YELLOW,
GREEN
}
Declare the allowed state transitions and build an FSM:
final FSMEnumMutableBuilderType<TrafficLight> b =
FSMEnumMutable.builder(TrafficLight.RED);
b.addTransition(TrafficLight.RED, TrafficLight.YELLOW);
b.addTransition(TrafficLight.YELLOW, TrafficLight.GREEN);
b.addTransition(TrafficLight.GREEN, TrafficLight.YELLOW);
b.addTransition(TrafficLight.YELLOW, TrafficLight.RED);
var fsm = b.build();
Execute transitions:
assert TrafficLight.RED == m.current();
m.transition(TrafficLight.YELLOW;
assert TrafficLight.YELLOW == m.current();
m.transition(TrafficLight.GREEN;
assert TrafficLight.GREEN == m.current();
m.transition(TrafficLight.YELLOW;
assert TrafficLight.YELLOW == m.current();
m.transition(TrafficLight.RED;
assert TrafficLight.RED == m.current();
m.transition(TrafficLight.YELLOW;
assert TrafficLight.YELLOW == m.current();
m.transition(TrafficLight.GREEN;
assert TrafficLight.GREEN == m.current();
m.transition(TrafficLight.YELLOW;
assert TrafficLight.YELLOW == m.current();
m.transition(TrafficLight.RED;
assert TrafficLight.RED == m.current();
m.transition(TrafficLight.YELLOW;
assert TrafficLight.YELLOW == m.current();
m.transition(TrafficLight.GREEN;
assert TrafficLight.GREEN == m.current();
The FSM will throw an FSMTransitionException if an attempt is made to
perform a transition that is not permitted.
