annotate sequences/@bufferdata/bufferdata.m @ 2:7357e1dc2ad6

Simplified scheduler library with new schedule representation.
author samer
date Sat, 22 Dec 2012 16:17:51 +0000
parents 672052bd81f8
children
rev   line source
samer@0 1 function a=bufferdata(source,L,varargin)
samer@0 2 % bufferdata - collect elements of sequence into sequence of arrays
samer@0 3 %
samer@0 4 % bufferdata ::
samer@0 5 % data [[N]] ~'source signal',
samer@0 6 % L:natural ~'buffer width',
samer@0 7 % -> data [[N,L]]. ~'buffered sequence (no-overlapping)'.
samer@0 8
samer@0 9
samer@0 10 if nargin==1 && isa(source,'bufferdata'), a=source;
samer@0 11 elseif nargin==0, a=bufferdata([],1);
samer@0 12 else
samer@0 13 sz=size1(source);
samer@0 14
samer@0 15 a.dim = length(sz)+1;
samer@0 16 a.width = L;
samer@0 17 [a.buf,source] = readcat(a.dim,source,L);
samer@0 18
samer@0 19 if isempty(a.buf), a=[];
samer@0 20 else
samer@0 21 % sort out function table
samer@0 22 ft.datafn=@datafn;
samer@0 23 ft.stringfn=@stringfn;
samer@0 24 ft.nextfn = @nextfn;
samer@0 25
samer@0 26 a=class(a,'bufferdata',ddata(source,[sz L],ft));
samer@0 27 end
samer@0 28 end
samer@0 29
samer@0 30 function s=stringfn(a), s=sprintf('buffer(%d)',a.width);
samer@0 31 function x=datafn(a), x=a.buf;
samer@0 32 function a=nextfn(a)
samer@0 33 % read next lot of values and make an array
samer@0 34 src=source(a);
samer@0 35 [a.buf,src]=readcat(a.dim,source(a),a.width);
samer@0 36 if isempty(a.buf), a=[];
samer@0 37 else
samer@0 38 a=setsource(a,src);
samer@0 39 %!! what if i<L?
samer@0 40 %a.length=size(source(a),a.dim);
samer@0 41 end
samer@0 42
samer@0 43 function [buf,src]=readcat(dim,src,L)
samer@0 44 buf=[];
samer@0 45 for i=1:L
samer@0 46 if isempty(src), break; end
samer@0 47 buf=cat(dim,buf,head(src));
samer@0 48 src=next(src);
samer@0 49 end
samer@0 50