bitwise 0.1.1

Portable high-level bitwise manipulation algorithms.
use word::Word;

/// Number of trailing ones in the binary representation of `x`.
///
/// # Keywords:
///
/// Count trailing ones.
///
/// # Examples
///
/// ```
/// use bitwise::word::*;
///
/// let n = 0b0010_0111u16;
///
/// assert_eq!(n.count_trailing_ones(), 3);
/// assert_eq!(count_trailing_ones(n), 3);
/// ```
#[inline]
pub fn count_trailing_ones<T: Word>(x: T) -> T {
    T::trailing_zeros(!x)
}

/// Method version of [`count_trailing_ones`](fn.count_trailing_ones.html).
pub trait CountTrailingOnes {
    #[inline]
    fn count_trailing_ones(self) -> Self;
}

impl<T: Word> CountTrailingOnes for T {
    #[inline]
    fn count_trailing_ones(self) -> Self {
        count_trailing_ones(self)
    }
}