annotate sequences/+seq/selector.m @ 61:eff6bddf82e3 tip

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 9d24b616bb06
children
rev   line source
samer@36 1 % selector - Use boolean function to keep only matching elements from sequence
samer@3 2 %
samer@36 3 % selector :: (A->bool), seq(A) -> seq(A).
samer@36 4 classdef selector < seq
samer@3 5 properties (GetAccess=private, SetAccess=private)
samer@23 6 fn % :: A->bool
samer@23 7 source % :: seq(A)
samer@23 8 x % :: A
samer@23 9 end
samer@23 10 methods (Static)
samer@23 11 function o=make(fn,source)
samer@23 12 source=dropwhile(inverse(fn),source);
samer@38 13 if isempty(source), o=nil; else o=seq.selector(fn,source); end
samer@23 14 end
samer@3 15 end
samer@3 16 methods
samer@36 17 function d=selector(fn,source)
samer@23 18 d.fn=fn;
samer@23 19 d.x=head(source);
samer@3 20 d.source=source;
samer@3 21 end
samer@3 22
samer@3 23 function z=elsize(o), z=elsize(d.x); end
samer@3 24 function s=tostring(o), s=sprintf('%s >> %s?',tostring(o.source),tostring(o.fn)); end
samer@3 25 function x=head(d), x=d.x; end
samer@3 26 function o=next(o)
samer@3 27 while 1
samer@3 28 o.source=next(o.source);
samer@23 29 if isempty(o.source), o=nil; return; end
samer@3 30 o.x=head(o.source);
samer@3 31 if o.fn(o.x), break; end
samer@3 32 end
samer@3 33 end
samer@3 34 end
samer@3 35 end
samer@23 36
samer@23 37 function g=inverse(f), g=@(x)~f(x); end