lib8: interpolate: provide a trait to handle fract8 operations
This commit is contained in:
		| @@ -1,8 +1,19 @@ | ||||
| use num::PrimInt; | ||||
|  | ||||
| pub fn scale8(i: u8, scale: u8) -> u8 { | ||||
| type Fract8 = u8; | ||||
| pub trait Fract8Ops { | ||||
|     fn scale8(self, scale: Fract8) -> Self; | ||||
| } | ||||
|  | ||||
| impl Fract8Ops for u8 { | ||||
|     fn scale8(self, scale: Fract8) -> Self { | ||||
|         // borrowed from FastLED | ||||
|     (i as u16 * scale as u16).wrapping_shr(8) as u8 | ||||
|         (self as u16 * (1 + scale as u16)).unsigned_shr(8) as u8 | ||||
|     } | ||||
| } | ||||
|  | ||||
| pub fn scale8<T: Fract8Ops>(i: T, scale: Fract8) -> T { | ||||
|     i.scale8(scale) | ||||
| } | ||||
|  | ||||
| pub fn avg7(i: i8, j: i8) -> i8 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user