Pārlūkot izejas kodu

Added ebb_loop module.

Paul Downen 14 gadi atpakaļ
vecāks
revīzija
3a854ab67f
2 mainītis faili ar 23 papildinājumiem un 1 dzēšanām
  1. 19 0
      src/ebb_loop.erl
  2. 4 1
      src/ebb_prim.erl

+ 19 - 0
src/ebb_loop.erl

@@ -0,0 +1,19 @@
+-module(ebb_loop).
+-export([loopback/1, state/2]).
+
+loopback(Op) ->
+    N = flow_graph:in_arity(Op),
+    Block = lists:duplicate(N,0),
+    Pass = lists:seq(2,N+1),
+    flow_graph:loop(
+      ebb_prim:id(N),
+      flow_graph:pipe(
+	[Op,
+	 flow_graph:split(N+1),
+	 flow_graph:switch(
+	   flow_graph:route(N+1, [1]),
+	   [{loop, flow_graph:route(N+1, lists:append(Block,Pass))},
+	    {stop, flow_graph:route(N+1, lists:append(Pass,Block))}])])).
+
+state(Init, Op) ->
+    flow_graph:loop(Init, Op).

+ 4 - 1
src/ebb_prim.erl

@@ -1,7 +1,7 @@
 -module(ebb_prim).
 -export([task/2, task/1, return/1,
 	 func/1, app/2, dynamic/1,
-	 ignore/1, nop/0, id/0]).
+	 ignore/1, nop/0, id/0, id/1]).
 
 task(Func, Arg) ->
     app(dynamic(Func), return(Arg)).
@@ -29,3 +29,6 @@ nop() ->
 
 id() ->
     flow_graph:route(1, [1]).
+
+id(N) ->
+    flow_graph:route(N, lists:seq(1,N)).