Mercurial > hg > ishara
diff arrows/@arrf/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/@arrf/construct.m Wed Dec 19 22:38:28 2012 +0000 @@ -0,0 +1,32 @@ +function u=construct(s,sizes_in) + u=mkunit(s); + fn=s.fn(sizes_in); + if isempty(s.sizefn) + u.sizes_out=guess_sizes(fn,sizes_in,nargout(s)); + else + u.sizes_out=s.sizefn(sizes_in); + end + u.process=mkproc(fn,nargin(s),nargout(s)); + +end + +function f=mkproc(fn,nin,nout); + if nout==0, f = @proc_n0; + elseif nin==0, f = @proc_0n; + elseif nin==1 && nout==1, f=@proc_11; + else f=@proc_nn; end + + function proc_n0(varargin), fn(varargin{1:nin}); end + function out=proc_11(in), out=fn(in); end + function varargout=proc_0n, [varargout{1:nout}]=fn(); end + function varargout=proc_nn(varargin), + [varargout{1:nout}]=fn(varargin{1:nin}); + end +end + +function sz_out=guess_sizes(fn,sz_in,nout) + ins = map(@zeros,sz_in); + [outs{1:nout}] = fn(ins{:}); + sz_out = map(@size,outs); +end +