lib8: interpolate: provide a trait to handle fract8 operations
This commit is contained in:
parent
9dff0119a4
commit
5fed51fbd1
@ -1,8 +1,19 @@
|
|||||||
use num::PrimInt;
|
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
|
// 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 {
|
pub fn avg7(i: i8, j: i8) -> i8 {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user