|
@@ -60,12 +60,12 @@ list_output(X) ->
|
|
%%% Simplification
|
|
%%% 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) ->
|
|
simpl(Op) ->
|
|
case ebb_prim:is_operation(Op) of
|
|
case ebb_prim:is_operation(Op) of
|
|
true -> Op;
|
|
true -> Op;
|
|
@@ -83,7 +83,11 @@ simpl_pipe(R2 = #route{in=N}, Acc) ->
|
|
case {R2 == ebb_flow:id(N), Acc} of
|
|
case {R2 == ebb_flow:id(N), Acc} of
|
|
{true, _} -> Acc;
|
|
{true, _} -> Acc;
|
|
{false, [R1 = #route{} | Rest]} ->
|
|
{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]
|
|
{false, _} -> [R2 | Acc]
|
|
end;
|
|
end;
|
|
simpl_pipe(#split{size=N}, [#merge{size=N} | Acc]) ->
|
|
simpl_pipe(#split{size=N}, [#merge{size=N} | Acc]) ->
|