samer@0: function u=construct(s,sizes_in) samer@0: samer@0: nin=nargin(s.base); samer@0: samer@0: u=construct(s.base,sizes_in(1:nin)); samer@0: u.sizes_out = [u.sizes_out,sizes_in(nin+(1:s.extra))]; samer@0: u.process = mkproc(u.process,nin,nargout(s.base),s.extra); samer@0: end samer@0: samer@0: function f=mkproc(g,nin,nout,extra) samer@0: f=@proc; samer@0: if extra==1 samer@0: if nin==1 && nout==1, f=@proc_111; samer@0: elseif nin==1 && nout==0, f=@proc_101; samer@0: elseif nin==0 && nout==1, f=@proc_011; samer@0: else, x=1:extra; f=@proc_nnn; end samer@0: else samer@0: x=1:extra; samer@0: f=@proc_nnn; samer@0: end samer@0: function [y1,x]=proc_111(x1,x), y1=g(x1); end samer@0: function x=proc_101(x1,x), g(x1); end samer@0: function [y1,x]=proc_011(x), y1=g(x1); end samer@0: samer@0: function varargout=proc_nnn(varargin) samer@0: [varargout{1:nout}]=g(varargin{1:nin}); samer@0: varargout(nout+x)=varargin(nin+x); samer@0: end samer@0: end samer@0: