samer@0: function o=takewhile(f,source) samer@0: % takewhile - Take elements of seq while a condition is met. samer@0: % samer@0: % takewhile :: (A->bool), seq A -> seq A samer@0: samer@0: if nargin==0, o=takewhile(@(e)true,0); samer@0: elseif isa(source,'takewhile'), o=source; samer@0: elseif isempty(source), o=[]; samer@0: elseif ~f(head(source)), o=[]; samer@0: else samer@0: ft.datafn=@datafn; samer@0: ft.stringfn=@stringfn; samer@0: ft.nextfn=@nextfn; samer@0: o.f=f; samer@0: o.x=head(source); samer@0: o=class(o,'takewhile',ddata(source,size(source),ft)); samer@0: end samer@0: samer@0: function x=datafn(o), x=o.x; samer@0: function s=stringfn(o), s=sprintf('takewhile(%s)',tostring(o.f)); samer@0: function o=nextfn(o) samer@0: o=next_c(o); samer@0: if ~isempty(o), samer@0: o.x=headsource(o); samer@0: if ~o.f(o.x), o=[]; end samer@0: end samer@0: samer@0: samer@0: