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
|