+ if (!box_out.readyForDataFromShip()) return;
+ if (state!=3 && !box_in.dataReadyForShip()) return;
+ switch(state) {
+ case 0: out = box_in.removeDataForShip(); break;
+ case 1: temp = box_in.removeDataForShip(); break;
+ case 2:
+ long in = box_in.removeDataForShip();
+ long mm = maj(temp, out, in);
+ box_out.addDataFromShip(mm << 1, ((mm >> (getFleet().getWordWidth()-1)) & 1L)!=0);
+ temp = (temp ^ out) ^ in;
+ break;
+ case 3: box_out.addDataFromShip(temp, false); break;