annotate general/funutils/@function_handle/mtimes.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 62304c930111
children
rev   line source
samer@40 1 function h=mtimes(g,f)
samer@12 2 % compose - Constructs composition of two functions
samer@12 3 %
samer@40 4 % compose :: (A{:}->B{:}), (B{:}->C{:}) -> (A{:}->C{:}).
samer@12 5 %
samer@12 6 % returns the function h such that h(...) = f(g(...))
samer@39 7 % If functions have multiple returns and arguments, outputs
samer@39 8 % from g are routed to f.
samer@12 9
samer@39 10 n1=nargout(g); if n1<0, n1=inf; end
samer@39 11 n2=nargin(f); if n2<0, n2=inf; end
samer@39 12 n3=nargout(f); if n3<0, n3=inf; end
samer@39 13 nint=min(n1,n2);
samer@39 14 if ~isfinite(nint), error('Cannot determine number of intermediate values'); end
samer@39 15
samer@39 16 fns = { @q00, @q01, @q0n; @q10, @q11, @q1n; @qn0, @qn1, @qnn };
samer@39 17 h=fns{ acount(nint,1)+1, acount(n3,1)+1};
samer@39 18
samer@39 19 function q00(varargin), g(varargin{:}); f(); end
samer@39 20 function q10(varargin), f(g(varargin{:})); end
samer@39 21 function qn0(varargin), [y{1:nint}]=g(varargin{:}); f(y{:}); end
samer@39 22 function x=q01(varargin), g(varargin{:}); x=f(); end
samer@39 23 function x=q11(varargin), x=f(g(varargin{:})); end
samer@39 24 function x=qn1(varargin), [y{1:nint}]=g(varargin{:}); x=f(y{:}); end
samer@39 25 function varargout=q0n(varargin), g(varargin{:}); [varargout{1:nargout}]=f(); end
samer@39 26 function varargout=q1n(varargin), [varargout{1:nargout}]=f(g(varargin{:})); end
samer@39 27 function varargout=qnn(varargin), [y{1:nint}]=g(varargin{:}); [varargout{1:nargout}]=f(y{:}); end
samer@12 28 end