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 64 65 66 67 68 69 70 71 72 73 74 75 76 77
#[inline] pub fn is_valid(x: f32) -> bool { !(x.is_nan() || x.is_infinite()) } /// Gets the next power of two for a given value /// /// # Examples /// ``` /// use vex::next_power_of_two; /// let n = next_power_of_two(1); /// assert_eq!(n, 2); /// ``` /// ``` /// use vex::next_power_of_two; /// let n = next_power_of_two(2); /// assert_eq!(n, 4); /// ``` #[inline] pub fn next_power_of_two(x: i32) -> i32 { let mut r = x; r |= r >> 1; r |= r >> 2; r |= r >> 4; r |= r >> 8; r |= r >> 16; r + 1 } /// Determines whether or not a given value is a power of two /// /// # Examples /// ``` /// use vex::is_power_of_two; /// let n = is_power_of_two(1); /// assert_eq!(n, true); /// ``` /// ``` /// use vex::is_power_of_two; /// let n = is_power_of_two(2); /// assert_eq!(n, true); /// ``` /// ``` /// use vex::is_power_of_two; /// let n = is_power_of_two(3); /// assert_eq!(n, false); /// ``` #[inline] pub fn is_power_of_two(x: i32) -> bool { x > 0 && (x & (x - 1)) == 0 } /// Returns 1 or -1 depending on the sign of the input value /// /// # Examples /// ``` /// use vex::sign; /// let mul = sign(1234.0); /// assert_eq!(mul, 1.0); /// ``` /// ``` /// use vex::sign; /// let mul = sign(-1234.0); /// assert_eq!(mul, -1.0); /// ``` #[inline] pub fn sign(x: f32) -> f32 { if x >= 0.0 { 1.0 } else { -1.0 } } pub trait Matrix<T> { fn transform_point(&self, point: &T) -> T; }