annotate sequences/@concat/concat.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 o=concat(sources,varargin)
samer@0 2 % concat - Concatenate sequences
samer@0 3 %
samer@0 4 % concat ::
samer@0 5 % seq (seq A) ~ 'sequence of sequences'
samer@0 6 % -> seq A ~ 'resultant sequence'.
samer@0 7 %
samer@0 8 % concat ::
samer@0 9 % {[N]->seq A} ~ 'cell array of N data objects',
samer@0 10 % -> seq A ~ 'resultant sequence'.
samer@0 11
samer@0 12
samer@0 13 if nargin==0, o=concat(repeat(0));
samer@0 14 elseif nargin==1 && isa(sources,'concat'), o=elems;
samer@0 15 else
samer@0 16 if iscell(sources), sources=celldata(sources); end
samer@0 17 if isempty(sources), o=[]; return; end
samer@0 18
samer@0 19 hd=head(sources);
samer@0 20 while isempty(hd)
samer@0 21 sources=next(sources);
samer@0 22 if isempty(sources), o=[]; return; end
samer@0 23 hd=head(sources);
samer@0 24 end
samer@0 25 o.current=hd;
samer@0 26 o.sources=next(sources);
samer@0 27 ft.datafn=@datafn;
samer@0 28 ft.charfn=@stringfn;
samer@0 29 ft.nextfn=@nextfn;
samer@0 30
samer@0 31 o=class(o,'concat',data(size(o.current),ft));
samer@0 32 end
samer@0 33
samer@0 34
samer@0 35 function x=datafn(o), x=head(o.current);
samer@0 36 function s=stringfn(o), s=sprintf('concat(%s|...)',tostring(o.current));
samer@0 37 function o=nextfn(o),
samer@0 38 s1=next(o.current);
samer@0 39 if ~isempty(s1),
samer@0 40 o.current=s1;
samer@0 41 o=setsize(o,size(o.current));
samer@0 42 else
samer@0 43 if isempty(o.sources), o=[]; return; end
samer@0 44
samer@0 45 hd=head(o.sources);
samer@0 46 while isempty(hd)
samer@0 47 o.sources=next(o.sources);
samer@0 48 if isempty(o.sources), o=[]; return; end
samer@0 49 hd=head(o.sources);
samer@0 50 end
samer@0 51 o.current=hd;
samer@0 52 o.sources=next(o.sources);
samer@0 53 o=setsize(o,size(hd));
samer@0 54 end