1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#![feature(conservative_impl_trait)]
#![warn(missing_docs)]
extern crate bytes;
extern crate clamp;
extern crate rayon;
extern crate time;
mod formats;
mod function;
mod chunky;
mod transforms;
pub use self::formats::*;
pub use self::transforms::*;
pub use self::chunky::*;
pub use self::function::*;
use std::ops::Deref;
pub trait Image {
type Pixel;
fn width(&self) -> usize;
fn height(&self) -> usize;
unsafe fn pixel(&self, x: usize, y: usize) -> Self::Pixel;
}
impl<T, U> Image for U
where
U: Deref<Target = T> + ?Sized,
T: Image + ?Sized
{
type Pixel = T::Pixel;
fn width(&self) -> usize { self.deref().width() }
fn height(&self) -> usize { self.deref().height() }
unsafe fn pixel(&self, x: usize, y: usize) -> Self::Pixel {
self.deref().pixel(x, y)
}
}