samer@0: % construct - construct unit for serial connection of two arrows samer@0: function u=construct(o,sizes_in) samer@0: u1=[]; u2=[]; samer@0: try samer@0: u1=construct(o.unit1,sizes_in); samer@0: u2=construct(o.unit2,u1.sizes_out); samer@0: n_int=nargout(o.unit1); samer@0: n_out=nargout(o.unit2); samer@0: catch ex samer@0: if ~isempty(u2), u2.dispose(); end samer@0: if ~isempty(u1), u1.dispose(); end samer@0: rethrow(ex); samer@0: end samer@0: samer@0: samer@0: u=mkunit(o); samer@0: u.starting= @starting; samer@0: u.stopping= @stopping; samer@0: u.dispose = @dispose; samer@0: if n_int==1 samer@0: if n_out==1 samer@0: if nargin(o.unit1)==1 samer@0: u.process = @proc_111; samer@0: else samer@0: u.process = @proc_n11; samer@0: end samer@0: else samer@0: if nargin(o.unit1)==1 samer@0: u.process = @proc_11n; samer@0: else samer@0: u.process = @proc_n1n; samer@0: end samer@0: end samer@0: else samer@0: if nargin(o.unit1)==1 && n_out==1 samer@0: u.process = @proc_1n1; samer@0: else samer@0: u.process = @proc_val; samer@0: end samer@0: end samer@0: u.get_state = @get_state; samer@0: u.set_state = @set_state; samer@0: u.sizes_out = u2.sizes_out; samer@0: u.viewables = [u1.viewables;u2.viewables]; samer@0: samer@0: function y=proc_111(x), y=u2.process(u1.process(x)); end samer@0: function y=proc_n11(varargin), y=u2.process(u1.process(varargin{:})); end samer@0: function varargout=proc_11n(x), [varargout{1:n_out}]=u2.process(u1.process(x)); end samer@0: function varargout=proc_n1n(varargin) samer@0: [varargout{1:n_out}] = u2.process(u1.process(varargin{:})); samer@0: end samer@0: samer@0: function y=proc_1n1(x) samer@0: [tempvals{1:n_int}] = u1.process(x); samer@0: y=u2.process(tempvals{:}); samer@0: end samer@0: samer@0: function varargout=proc_val(varargin) samer@0: [tempvals{1:n_int}] = u1.process(varargin{:}); samer@0: [varargout{1:n_out}] = u2.process(tempvals{:}); samer@0: end samer@0: samer@0: samer@0: function dispose, u1.dispose(); u2.dispose(); end samer@0: function starting, u1.starting(); u2.starting(); end samer@0: function stopping, u1.stopping(); u2.stopping(); end samer@0: samer@0: function s=get_state, s = {u1.get_state(),u2.get_state()}; end samer@0: function set_state(s), u1.set_state(s{1}); u2.set_state(s{2}); end samer@0: end