Mercurial > hg > ishara
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 +