--- /dev/null
+package edu.berkeley.fleet.interpreter.ships;
+import edu.berkeley.fleet.interpreter.*;
+import edu.berkeley.fleet.*;
+
+import java.util.*;
+import java.io.*;
+
+public class Counter extends InterpreterShip {
+
+ private int count = 0;
+
+ DataInbox load = new DataInbox(this, "load");
+ TokenInbox decrement = new TokenInbox(this, "decrement");
+ TokenOutbox zero = new TokenOutbox(this, "zero");
+
+ public Counter(Interpreter fleet, String name) {
+ super(fleet, name);
+ }
+
+ public String getBalsaName() { return "counter"; }
+ public void service() {
+ if (!zero.readyForTokenFromShip()) return;
+ if (count==0 && load.dataReadyForShip()) {
+ count = load.removeDataForShip();
+ return;
+ }
+ if (count>0 && decrement.tokenReadyForShip()) {
+ decrement.removeTokenForShip();
+ count--;
+ if (count==0)
+ zero.addTokenFromShip();
+ }
+ }
+
+}