18 package finitestatemachines;
20 import ca.uqac.lif.cep.Connector;
21 import ca.uqac.lif.cep.Pullable;
22 import ca.uqac.lif.cep.fsm.FunctionTransition;
23 import ca.uqac.lif.cep.fsm.MooreMachine;
24 import ca.uqac.lif.cep.functions.StreamVariable;
25 import ca.uqac.lif.cep.functions.Constant;
26 import ca.uqac.lif.cep.functions.FunctionTree;
27 import ca.uqac.lif.cep.tmf.QueueSource;
28 import ca.uqac.lif.cep.util.Equals;
61 public static void main(String[] args)
67 MooreMachine machine =
new MooreMachine(1, 1);
73 final int UNSAFE = 0, SAFE = 1, ERROR = 2;
84 machine.addTransition(UNSAFE,
new FunctionTransition(
85 new FunctionTree(Equals.instance,
86 StreamVariable.X,
new Constant(
"hasNext")), SAFE));
88 machine.addTransition(UNSAFE,
new FunctionTransition(
89 new FunctionTree(Equals.instance,
90 StreamVariable.X,
new Constant(
"next")), ERROR));
92 machine.addTransition(SAFE,
new FunctionTransition(
93 new FunctionTree(Equals.instance,
94 StreamVariable.X,
new Constant(
"next")), UNSAFE));
96 machine.addTransition(SAFE,
new FunctionTransition(
97 new FunctionTree(Equals.instance,
98 StreamVariable.X,
new Constant(
"hasNext")), SAFE));
102 machine.addTransition(ERROR,
new FunctionTransition(
103 new Constant(
true), ERROR));
110 machine.addSymbol(UNSAFE,
new Constant(
true));
111 machine.addSymbol(SAFE,
new Constant(
true));
112 machine.addSymbol(ERROR,
new Constant(
false));
117 QueueSource source =
new QueueSource();
118 source.setEvents(
"hasNext",
"next",
"hasNext",
119 "hasNext",
"next",
"next");
120 Connector.connect(source, machine);
123 Pullable p = machine.getPullableOutput();
124 for (
int i = 0; i < 7; i++)
126 Boolean b = (Boolean) p.pull();
127 System.out.println(b);
Check the proper ordering of next/hasNext strings.