samer@0: function u=construct(s,sizes_in) samer@0: u=mkunit(s); samer@0: nout=nargout(s); samer@0: samer@0: [fn,state]=s.init(sizes_in{:}); samer@0: u.sizes_out = guess_sizes(fn,nout,sizes_in,state); samer@0: u.get_state = @get_state; samer@0: u.set_state = @set_state; samer@0: u.process = ifx(nout>0,@proc,@proc0); samer@0: samer@0: function s=get_state, s=state; end samer@0: function set_state(s), state=s; end samer@0: function varargout=proc(varargin) samer@0: [varargout{1:nout},state]=fn(varargin{:},state); samer@0: end samer@0: function varargout=proc0(varargin) samer@0: state=fn(varargin{:},state); samer@0: end samer@0: end samer@0: samer@0: function sz_out=guess_sizes(fn,nout,sz_in,st) samer@0: ins = map(@zeros,sz_in); samer@0: if nout==0, s1=fn(ins{1},st); outs={}; samer@0: else [outs{1:nout},s1] = fn(ins{:},st); end samer@0: sz_out = map(@size,outs); samer@0: end samer@0: