Mercurial > hg > ishara
annotate arrows/@erate/construct.m @ 0:672052bd81f8
Initial partial import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:38:28 +0000 |
parents | |
children |
rev | line source |
---|---|
samer@0 | 1 function u=construct(s,sizes_in) |
samer@0 | 2 |
samer@0 | 3 nin=nargin(s.base); |
samer@0 | 4 |
samer@0 | 5 u=construct(s.base,s.sizes_in(1:nin)); |
samer@0 | 6 u.sizes_out = [u.sizes_out]; % !!! this is wrong. need better type system |
samer@0 | 7 u.process = mkproc(u.process,nin,nargout(s.base)); |
samer@0 | 8 end |
samer@0 | 9 |
samer@0 | 10 function f=mkproc(g,nin,nout) |
samer@0 | 11 empty={{}}; |
samer@0 | 12 f=@proc; |
samer@0 | 13 if nin==1 && nout==1, f=@proc_11; |
samer@0 | 14 elseif nin==1 && nout==0, f=@proc_10; |
samer@0 | 15 else, f=@proc_nn; end |
samer@0 | 16 |
samer@0 | 17 function proc_10(x1), |
samer@0 | 18 if ~isempty(x1), g(x1{1}); end; |
samer@0 | 19 end |
samer@0 | 20 function y1=proc_11(x1,x), if isempty(x1), y1={}; else y1={g(x1{1})}; end; end |
samer@0 | 21 |
samer@0 | 22 function varargout=proc_nn(varargin) |
samer@0 | 23 if any(cellfun(@isempty,varargin)), varargout=repmat(empty,1,nout); |
samer@0 | 24 else |
samer@0 | 25 ins=cellfun(@unbox,varargin(1:nin)); |
samer@0 | 26 [outs{1:nout}]=g(ins{:}); |
samer@0 | 27 varargout=cellfun(@box,outs); |
samer@0 | 28 end |
samer@0 | 29 end |
samer@0 | 30 function x=unbox(y), x=y{1}; end |
samer@0 | 31 function y=box(x), y={x}; end |
samer@0 | 32 end |
samer@0 | 33 |