Sfoglia il codice sorgente

Fixed ebb_run:zip_pars to align par operations as much as possible.

Paul Downen 14 anni fa
parent
commit
6e4755d816
1 ha cambiato i file con 13 aggiunte e 9 eliminazioni
  1. 13 9
      src/ebb_run.erl

+ 13 - 9
src/ebb_run.erl

@@ -125,15 +125,19 @@ zip_pars(M, _Par1 = [Op1|Rest1], Prev1,
 	 N, _Par2 = [Op2|Rest2], Prev2,
 	 Acc) ->
     case {M+ebb_prim:out_arity(Op1), N+ebb_prim:in_arity(Op2)} of
-	{I, I} -> zip_pars(
-		    I, Rest1, [],
-		    I, Rest2, [],
-		    [ {lists:reverse([Op1|Prev1]), lists:reverse([Op2|Prev2])}
-		      | Acc ]);
-	{M2, N2} -> zip_pars(
-		      M2, Rest1, [Op1|Prev1],
-		      N2, Rest2, [Op2|Prev2],
-		      Acc)
+	{I, I} -> 
+	    zip_pars(I, Rest1, [],
+		     I, Rest2, [],
+		     [ {lists:reverse([Op1|Prev1]), lists:reverse([Op2|Prev2])}
+		       | Acc ]);
+	{M2, N2} when M2 < N2 ->
+	    zip_pars(M2, Rest1, [Op1|Prev1],
+		     N, [Op2|Rest2], Prev2,
+		     Acc);
+	{M2, N2} when N2 < M2 ->
+	    zip_pars(M, [Op1|Rest1], Prev1,
+		     N2, Rest2, [Op2|Prev2],
+		     Acc)
     end.
 
 simpl_pipe_route(#route{in=In, map=M1}, #route{map=M2}) ->