X-Git-Url: http://git.megacz.com/?p=fleet.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Ffleet%2Finterpreter%2FInterpreterShip.java;h=85358fa03b0eda6871fd311569d05cbe0162de60;hp=43fa15b4c7d3aab0f7abf4138137a1e2cc1716e5;hb=b0f472a8a5a902f62cfa037290166e443ad0c6b4;hpb=e98330b52aadb60c5984ea8aff59faaa695f82a6 diff --git a/src/edu/berkeley/fleet/interpreter/InterpreterShip.java b/src/edu/berkeley/fleet/interpreter/InterpreterShip.java index 43fa15b..85358fa 100644 --- a/src/edu/berkeley/fleet/interpreter/InterpreterShip.java +++ b/src/edu/berkeley/fleet/interpreter/InterpreterShip.java @@ -1,3 +1,4 @@ + package edu.berkeley.fleet.interpreter; import edu.berkeley.fleet.api.*; import edu.berkeley.fleet.two.*; @@ -26,7 +27,32 @@ abstract class InterpreterShip extends FleetTwoShip { public abstract void service(); public final void _service() { + + // service all the docks for(InterpreterDock p : docks.values()) p.service(); + + // flushing logic (must come between dock servicing and subclass) + boolean someflushing = false; + boolean allflushing = true; + boolean someempty = false; + for(InterpreterDock d : docks.values()) { + if (!d.isInputDock()) continue; + if (d.flushing) someflushing = true; + else allflushing = false; + if (!d.flushing && !d.dataReadyForShip) someempty = true; + } + if (allflushing && someflushing) { + for(InterpreterDock d : docks.values()) + if (d.isInputDock()) + d.flushing = false; + return; + } else if (someflushing && !someempty) { + for(InterpreterDock d : docks.values()) + if (d.isInputDock() && !d.flushing && d.dataReadyForShip) + d.dataReadyForShip = false; + } + + // now pass control to the subclass service(); }