Mercurial > hg > ishara
annotate sequences/@concat/concat.m @ 0:672052bd81f8
Initial partial import.
author | samer |
---|---|
date | Wed, 19 Dec 2012 22:38:28 +0000 |
parents | |
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 |