annotate arrows/@arrf/construct.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 672052bd81f8
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