samer@0: function d=subsampdata(a,b,varargin) samer@0: % subsampdata - Use arbitrary function to test and filter elements of another sequence samer@0: % samer@0: % subsampdata :: samer@0: % natural ~ sample rate, samer@0: % data(A), ~ source data, samer@0: % ... ~ options) samer@0: % -> data(A). samer@0: % samer@0: % Options samer@0: % 'datafn':: Data A->A ~ override function to get data samer@0: % 'stringfn':: Data A->String ~ override conversion to string samer@0: % 'nextfn':: Data A->(Data A | []) ~ override next function samer@0: % samer@0: % Methods samer@0: % samer@0: % source :: filterdata(A) -> data(A). samer@0: samer@0: if nargin==0, a=subsampdata(1,singleton(0)); end samer@0: if isa(a,'subsampdata'), d=a; samer@0: else samer@0: d.n=a; samer@0: samer@0: opts=prefs('datafn',@datafn,'stringfn',@stringfn,'sizecheck',0,varargin{:}); samer@0: opts.nextfn=@nextfn; samer@0: d=class(d,'subsampdata',ddata(b,size(b),opts)); samer@0: end samer@0: samer@0: function x=datafn(d), x=head(source(d)); samer@0: function s=stringfn(d), s=sprintf('subsamp(%d)',tostring(d.n)); samer@0: function o=nextfn(o) samer@0: for i=1:o.n samer@0: o=next_c(o); samer@0: if isempty(o), break; end samer@0: end samer@0: samer@0: samer@0: