diff arrows/@loop1/construct.m @ 0:672052bd81f8

Initial partial import.
author samer
date Wed, 19 Dec 2012 22:38:28 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/arrows/@loop1/construct.m	Wed Dec 19 22:38:28 2012 +0000
@@ -0,0 +1,27 @@
+function u=construct(s,sizes_in)
+	u=mkunit(s);
+	nout=nargout(s);
+
+	[fn,state]=s.init(sizes_in{:});
+	u.sizes_out = guess_sizes(fn,nout,sizes_in,state);
+	u.get_state = @get_state;
+	u.set_state = @set_state;
+	u.process   = ifx(nout>0,@proc,@proc0);
+
+	function s=get_state, s=state; end
+	function set_state(s), state=s; end
+	function varargout=proc(varargin)
+		[varargout{1:nout},state]=fn(varargin{:},state); 
+	end
+	function varargout=proc0(varargin)
+		state=fn(varargin{:},state); 
+	end
+end
+
+function sz_out=guess_sizes(fn,nout,sz_in,st)
+	ins = map(@zeros,sz_in);
+	if nout==0, s1=fn(ins{1},st); outs={};
+	else [outs{1:nout},s1] = fn(ins{:},st); end
+	sz_out = map(@size,outs);
+end
+