samer@0: function u=construct(s,sizes_in) samer@0: samer@0: nin1=nargin(s.a1); samer@0: nin2=nargin(s.a2); samer@0: samer@0: u1=[]; u2=[]; samer@0: try samer@0: u1=construct(s.a1,sizes_in(1:nin1)); samer@0: u2=construct(s.a2,sizes_in(nin1+(1:nin2))); samer@0: samer@0: u.sizes_out = [u1.sizes_out,u2.sizes_out]; samer@0: samer@0: nout1=length(u1.sizes_out); samer@0: nout2=length(u2.sizes_out); samer@0: samer@0: ix1 = 1:nin1; ix2 = nin1+(1:nin2); samer@0: ox1 = 1:nout1; ox2 = nout1+(1:nout2); samer@0: samer@0: nout = length(u.sizes_out); samer@0: if all([nin1,nin2,nout1,nout2]==[1,1,1,1]), samer@0: u.process = @proc11; samer@0: else samer@0: u.process = @proc; samer@0: end 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: u.dispose = @dispose; samer@0: u.starting= @starting; samer@0: u.stopping= @starting; samer@0: u.dispose = @dispose; samer@0: u.get_state = @get_state; samer@0: u.set_state = @set_state; samer@0: u.viewables = [u1.viewables;u2.viewables]; samer@0: samer@0: function [y1,y2]=proc11(x1,x2) samer@0: y1=u1.process(x1); samer@0: y2=u2.process(x2); samer@0: end samer@0: samer@0: function varargout=proc(varargin) samer@0: varargout=cell(1,nout); samer@0: [varargout{ox1}]=u1.process(varargin{ix1}); samer@0: [varargout{ox2}]=u2.process(varargin{ix2}); samer@0: end 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 samer@0: