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
use word::Word; use bitintr; /// Clear the trailing bits set of `x`. /// /// If `x` is zero, returns `0`. /// /// # Intrinsics: /// - TBM: blcfill. /// /// # Examples /// /// ``` /// use bitwise::word::*; /// /// let n = 0b0110_1111; /// let s = 0b0110_0000; /// /// assert_eq!(n.clear_trailing_ones(), s); /// assert_eq!(clear_trailing_ones(0), 0); /// ``` #[inline] pub fn clear_trailing_ones<T: Word>(x: T) -> T { bitintr::x86::tbm::blcfill(x) } /// Method version of [`clear_trailing_ones`](fn.clear_trailing_ones.html). pub trait ClearTrailingOnes { #[inline] fn clear_trailing_ones(self) -> Self; } impl<T: Word> ClearTrailingOnes for T { #[inline] fn clear_trailing_ones(self) -> Self { clear_trailing_ones(self) } }