Mercurial > hg > ishara
annotate arrows/@arrf/construct.m @ 0:672052bd81f8
Initial partial import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:38:28 +0000 |
parents | |
children |
rev | line source |
---|---|
samer@0 | 1 function u=construct(s,sizes_in) |
samer@0 | 2 u=mkunit(s); |
samer@0 | 3 fn=s.fn(sizes_in); |
samer@0 | 4 if isempty(s.sizefn) |
samer@0 | 5 u.sizes_out=guess_sizes(fn,sizes_in,nargout(s)); |
samer@0 | 6 else |
samer@0 | 7 u.sizes_out=s.sizefn(sizes_in); |
samer@0 | 8 end |
samer@0 | 9 u.process=mkproc(fn,nargin(s),nargout(s)); |
samer@0 | 10 |
samer@0 | 11 end |
samer@0 | 12 |
samer@0 | 13 function f=mkproc(fn,nin,nout); |
samer@0 | 14 if nout==0, f = @proc_n0; |
samer@0 | 15 elseif nin==0, f = @proc_0n; |
samer@0 | 16 elseif nin==1 && nout==1, f=@proc_11; |
samer@0 | 17 else f=@proc_nn; end |
samer@0 | 18 |
samer@0 | 19 function proc_n0(varargin), fn(varargin{1:nin}); end |
samer@0 | 20 function out=proc_11(in), out=fn(in); end |
samer@0 | 21 function varargout=proc_0n, [varargout{1:nout}]=fn(); end |
samer@0 | 22 function varargout=proc_nn(varargin), |
samer@0 | 23 [varargout{1:nout}]=fn(varargin{1:nin}); |
samer@0 | 24 end |
samer@0 | 25 end |
samer@0 | 26 |
samer@0 | 27 function sz_out=guess_sizes(fn,sz_in,nout) |
samer@0 | 28 ins = map(@zeros,sz_in); |
samer@0 | 29 [outs{1:nout}] = fn(ins{:}); |
samer@0 | 30 sz_out = map(@size,outs); |
samer@0 | 31 end |
samer@0 | 32 |