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