remove obsolete ships
[fleet.git] / misc / obsolete-ships / Counter.java
diff --git a/misc/obsolete-ships/Counter.java b/misc/obsolete-ships/Counter.java
new file mode 100644 (file)
index 0000000..921a2b3
--- /dev/null
@@ -0,0 +1,35 @@
+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();
+        }
+    }
+
+}