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