Quellcode durchsuchen

Modified ebb_run:simpl to eliminate id route chains.

Paul Downen vor 13 Jahren
Ursprung
Commit
58736bb78f
1 geänderte Dateien mit 11 neuen und 7 gelöschten Zeilen
  1. 11 7
      src/ebb_run.erl

+ 11 - 7
src/ebb_run.erl

@@ -60,12 +60,12 @@ list_output(X) ->
 %%% Simplification
 %%%-----------------------------------------------------------------------------
 
-simpl(#pipe{ops=Inside}) ->
-    flatten(ebb_prim:pipe(simpl_pipe([ simpl(O) || O <- Inside ])));
-simpl(#par{ops=Inside}) ->
-    flatten(ebb_prim:par(simpl_par([ simpl(O) || O <- Inside ])));
-simpl(#switch{map=Map}) ->
-    ebb_prim:switch([ {Tag, simpl(Op)} || {Tag, Op} <- Map ]);
+simpl(Pipe = #pipe{ops=Inside}) ->
+    flatten(Pipe#pipe{ops=simpl_pipe([ simpl(O) || O <- Inside ])});
+simpl(Par = #par{ops=Inside}) ->
+    flatten(Par#par{ops=simpl_par([ simpl(O) || O <- Inside ])});
+simpl(Switch = #switch{map=Map}) ->
+    Switch#switch{map=[ {Tag, simpl(Op)} || {Tag, Op} <- Map ]};
 simpl(Op) ->
     case ebb_prim:is_operation(Op) of
 	true  -> Op;
@@ -83,7 +83,11 @@ simpl_pipe(R2 = #route{in=N}, Acc) ->
     case {R2 == ebb_flow:id(N), Acc} of
 	{true, _} -> Acc;
 	{false, [R1 = #route{} | Rest]} ->
-	    [simpl_pipe_route(R1, R2) | Rest];
+	    R3 = #route{in=N3} = simpl_pipe_route(R1, R2),
+	    case R3 == ebb_flow:id(N3) of
+		true -> Rest;
+		false -> [R3 | Rest]
+	    end;
 	{false, _} -> [R2 | Acc]
     end;
 simpl_pipe(#split{size=N}, [#merge{size=N} | Acc]) ->