samer@1: % length - length of finite signal samer@1: function n=length(sig,varargin) samer@1: opts=prefs('chunk',1024,'init',2,'grow',2,'max',1e12,varargin{:}); samer@1: samer@1: s=construct(sig); samer@1: try % to make sure we dispose of s once opened samer@1: chunk=uint64(opts.chunk); samer@1: n=uint64(0); CHUNK=1:chunk; samer@1: r=s.reader(opts.chunk); samer@1: dummy=[]; samer@1: rem=0; samer@1: while rem==0 samer@1: [dummy,rem]=r(); samer@1: n=n+chunk; samer@1: if n>opts.max, error('maximum length exceeded'); end samer@1: end samer@1: n=n-uint64(rem); % remove rem samples from end samer@1: catch ex samer@1: s.dispose(); samer@1: rethrow(ex); samer@1: end samer@1: s.dispose(); samer@1: n=double(n); samer@1: end