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

Finally implemented perceptual brightness thing.
author samer
date Sun, 11 Oct 2015 10:20:42 +0100
parents 9e7be347b3a0
children
rev   line source
samer@36 1 % resizer - sequence with overridden reported element size
samer@3 2 %
samer@36 3 % resizer :: Size:[[1,E]], seq([_->A]) -> seq([Size->A]).
samer@36 4 classdef resizer < seq
samer@3 5 properties (GetAccess=private, SetAccess=private)
samer@3 6 source
samer@3 7 newsize
samer@3 8 check
samer@3 9 end
samer@3 10 methods
samer@36 11 function o=resizer(newsize,source,check)
samer@3 12 if ~size_match(elsize(source),newsize),
samer@36 13 error('seq.resizer: size mismatch');
samer@3 14 end
samer@3 15 if nargin<3, check=0; end
samer@3 16 o.source=source;
samer@3 17 o.newsize=newsize;
samer@3 18 o.check=check;
samer@3 19 end
samer@3 20
samer@3 21 function x=head(a), x=head(a.source); if a.check, size_check(a.newsize,size(x)); end; end
samer@23 22 function d=next(d), d.source=next(d.source); if isempty(d.source), d=nil; end; end
samer@3 23 function s=elsize(a), s=a.newsize; end
samer@3 24 function s=tostring(a), s=tostring(a.source); end
samer@3 25 end
samer@3 26 end
samer@3 27
samer@3 28 function b=size_match(s1,s2)
samer@3 29 b=all((s1==s2) | isnan(s1) | isnan(s2));
samer@3 30 end
samer@3 31
samer@3 32 function b=size_check(spec,size)
samer@3 33 if ~all((spec==size) | isnan(spec))
samer@36 34 error('seq.resizer: element size does not match specification');
samer@3 35 end
samer@3 36 end