Browse Source

Updated ebb_prim and ebb_pipe for the new flow_graph.

Paul Downen 13 years ago
parent
commit
462466ecd8
2 changed files with 22 additions and 51 deletions
  1. 13 33
      src/ebb_pipe.erl
  2. 9 18
      src/ebb_prim.erl

+ 13 - 33
src/ebb_pipe.erl

@@ -2,43 +2,23 @@
 -export([pipe/2, pipe/1, bind/2, feed/2, sequence/2, sequence/1]).
 
 pipe(Op1, Op2) ->
-    flow_graph:append(Op1, Op2).
+    flow_graph:pipe([Op1, Op2]).
 
-pipe([Op|Ops]) ->
-    lists:foldl(fun(O, G) -> pipe(G, O) end, Op, Ops).
+pipe([Op]) ->
+    Op;
+pipe(Ops = [_|_]) ->
+    flow_graph:pipe(Ops).
 
-bind(Task, FuncT) ->
-    feed(Task, ebb_prim:dynamic(FuncT)).
+bind(Task, Gen) ->
+    feed(Task, ebb_prim:dynamic(Gen)).
 
 feed(Task, Op) ->
-    flow_graph:append(Task, Op).
+    flow_graph:pipe([Task, Op]).
 
 sequence(Task1, Task2) ->
-    M = flow_graph:merge(),
-    H = flow_graph:hole(),
-    Out1 = flow_graph:get_out(Task1),
-    Out2 = flow_graph:get_out(Task2),
-    T = flow_graph:add_edge_list(
-	  link_tasks(Task1, Task2),
-	  [flow_graph:flow(Out1,H),
-	   flow_graph:index(H,M,1),
-	   flow_graph:index(Out2,M,2)]),
-    flow_graph:reroute(T, flow_graph:singleton(M)).
+    flow_graph:sequence([Task1, Task2]).
 
-sequence([Task1]) -> Task1;
-sequence([Task1|Tasks]) ->
-    M = flow_graph:merge(),
-    LinkMerge = fun(N, T) ->
-			H = flow_graph:hole(),
-			Out = flow_graph:get_out(T),
-			{N+1, flow_graph:add_edge_list(
-				T,
-				[flow_graph:flow(Out,H),
-				 flow_graph:index(H,M,N)])}
-		end,
-    Add = fun(T, {N, Ts}) -> LinkMerge(N, link_tasks(T, Ts)) end,
-    {_N, Ts} = lists:foldl(Add, LinkMerge(1, Task1), Tasks),
-    flow_graph:reroute(Ts, flow_graph:singleton(M)).
-
-link_tasks(Task1, Task2) ->
-    flow_graph:append([Task1, flow_graph:singleton(flow_graph:void()), Task2]).
+sequence([Task]) ->
+    Task;
+sequence(Tasks = [_|_]) ->
+    flow_graph:sequence(Tasks).

+ 9 - 18
src/ebb_prim.erl

@@ -7,34 +7,25 @@ task(Func, Arg) ->
     app(dynamic(Func), return(Arg)).
 
 task(Thunk) ->
-    V = flow_graph:void(),
-    D = flow_graph:delayed(),
-    flow_graph:from_list(V, D, [flow_graph:dynamic(V, D, Thunk)]).
+    flow_graph:dynamic(Thunk).
 
 return(Val) ->
-    flow_graph:singleton(flow_graph:value(Val)).
+    flow_graph:value(Val).
 
 func(Func) ->
-    In = flow_graph:hole(),
-    Out = flow_graph:hole(),
-    flow_graph:from_list(In, Out, [flow_graph:func(In, Out, Func)]).
+    flow_graph:func(Func).
 
 app(Op, Arg) ->
-    flow_graph:append(flow_graph:singleton(flow_graph:value(Arg)), Op).
+    flow_graph:pipe(return(Arg), Op).
 
-dynamic(FuncT) ->
-    In = flow_graph:hole(),
-    D = flow_graph:delayed(),
-    flow_graph:from_list(In, D, [flow_graph:dynamic(In, D, FuncT)]).
+dynamic(Gen) ->
+    flow_graph:dynamic(Gen).
 
 ignore(Task) ->
-    H = flow_graph:hole(),
-    V = flow_graph:void(),
-    I = flow_graph:from_list(H, V, [flow_graph:flow(H, V)]),
-    flow_graph:append(I, Task).
+    flow_graph:sequence([flow_graph:route(1, []), Task]).
 
 nop() ->
-    flow_graph:singleton(flow_graph:value('nop')).
+    flow_graph:value('nop').
 
 id() ->
-    flow_graph:singleton(flow_graph:hole()).
+    flow_graph:route(1, [1]).