|
@@ -3,7 +3,7 @@
|
|
|
|
|
|
%%% Operation construction
|
|
|
-export([func/1, value/1, values/1, dynamic/1, route/2,
|
|
|
- pipe/1, parallel/1, sequence/1,
|
|
|
+ pipe/1, parallel/1, sequence/1, funnel/1,
|
|
|
split/1, merge/1, switch/2, loop/2]).
|
|
|
|
|
|
%%% Operation querying
|
|
@@ -66,6 +66,8 @@ split(N) -> #split{size=N}.
|
|
|
|
|
|
merge(N) -> #merge{size=N}.
|
|
|
|
|
|
+funnel(N) -> #funnel{size=N}.
|
|
|
+
|
|
|
switch(Switch, Map = [{_, Op1}|Rest]) ->
|
|
|
try
|
|
|
{I, O} = lists:foldl(
|
|
@@ -100,6 +102,7 @@ in_arity(#parallel{in=In}) -> In;
|
|
|
in_arity(#sequence{in=In}) -> In;
|
|
|
in_arity(#split{}) -> 1;
|
|
|
in_arity(#merge{size=N}) -> N;
|
|
|
+in_arity(#funnel{size=N}) -> N;
|
|
|
in_arity(#switch{in=In}) -> In;
|
|
|
in_arity(#loop{in=In}) -> In.
|
|
|
|
|
@@ -112,6 +115,7 @@ out_arity(#parallel{out=Out}) -> Out;
|
|
|
out_arity(#sequence{out=Out}) -> Out;
|
|
|
out_arity(#split{size=N}) -> N;
|
|
|
out_arity(#merge{}) -> 1;
|
|
|
+out_arity(#funnel{}) -> 1;
|
|
|
out_arity(#switch{out=Out}) -> Out;
|
|
|
out_arity(#loop{out=Out}) -> Out.
|
|
|
|