samer@0: function a=bufferdata(source,L,varargin) samer@0: % bufferdata - collect elements of sequence into sequence of arrays samer@0: % samer@0: % bufferdata :: samer@0: % data [[N]] ~'source signal', samer@0: % L:natural ~'buffer width', samer@0: % -> data [[N,L]]. ~'buffered sequence (no-overlapping)'. samer@0: samer@0: samer@0: if nargin==1 && isa(source,'bufferdata'), a=source; samer@0: elseif nargin==0, a=bufferdata([],1); samer@0: else samer@0: sz=size1(source); samer@0: samer@0: a.dim = length(sz)+1; samer@0: a.width = L; samer@0: [a.buf,source] = readcat(a.dim,source,L); samer@0: samer@0: if isempty(a.buf), a=[]; samer@0: else samer@0: % sort out function table samer@0: ft.datafn=@datafn; samer@0: ft.stringfn=@stringfn; samer@0: ft.nextfn = @nextfn; samer@0: samer@0: a=class(a,'bufferdata',ddata(source,[sz L],ft)); samer@0: end samer@0: end samer@0: samer@0: function s=stringfn(a), s=sprintf('buffer(%d)',a.width); samer@0: function x=datafn(a), x=a.buf; samer@0: function a=nextfn(a) samer@0: % read next lot of values and make an array samer@0: src=source(a); samer@0: [a.buf,src]=readcat(a.dim,source(a),a.width); samer@0: if isempty(a.buf), a=[]; samer@0: else samer@0: a=setsource(a,src); samer@0: %!! what if i