[][src]Struct swar::Bits1

pub struct Bits1<N>(pub N);

This is used when each bit is a number stored in parallel.

Methods

impl Bits1<u128>[src]

pub fn from_element(e: u128) -> Self[src]

Spread a single value out to each element. Must be able to fit.

use swar::*;

assert_eq!(Bits1::from_element(1), Bits1(0xFFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF));
assert_eq!(Bits1::from_element(0), Bits1(0x0000_0000_0000_0000_0000_0000_0000_0000));

pub fn union(left: Bits2<u128>, right: Bits2<u128>) -> Self[src]

Takes two inputs that have half-sized elements and compresses them into half the space and puts them in the left and right sides of this.

use swar::*;

let input = Bits1(0xFEED_FACE_CAFE_BEEF_FEED_FACE_CAFE_BEEF);
let (left, right) = input.halve();
let output = Bits1::union(left, right);
assert_eq!(input, output);

pub fn sum_weight(self) -> u128[src]

pub fn sum_weight2(self) -> Bits2<u128>[src]

pub fn hwd(self, other: Self) -> Self[src]

This computes the hamming weight distance from hamming weights.

For a Bits1, this is the same as computing the hamming weight from the original number and is a simple XOR.

pub fn split(self) -> (Bits2<u128>, Bits2<u128>)[src]

pub fn halve(self) -> (Bits2<u128>, Bits2<u128>)[src]

Takes the left and right sides and spreads them out so that the bits in each element are spread out into twice the amount of space.

use swar::*;

let input = Bits1(0b1101 << 64 | 0b0101u128);
let (left, right) = input.halve();
assert_eq!(left, Bits2(0b0101_0001));
assert_eq!(right, Bits2(0b0001_0001));

Trait Implementations

impl<N: Copy> Copy for Bits1<N>[src]

impl<N: Debug> Debug for Bits1<N>[src]

impl<N: PartialEq> PartialEq<Bits1<N>> for Bits1<N>[src]

impl<N: Eq> Eq for Bits1<N>[src]

impl Add<Bits1<u128>> for Bits1<u128>[src]

Note that you are responsible for dealing with overflow. Try to avoid overflow or use the split() method to add in two halves. You can use split() on the result to get the carry bits.

type Output = Self

The resulting type after applying the + operator.

impl BitAnd<u128> for Bits1<u128>[src]

type Output = Self

The resulting type after applying the & operator.

impl Shr<u32> for Bits1<u128>[src]

type Output = Self

The resulting type after applying the >> operator.

impl<N: Clone> Clone for Bits1<N>[src]

default fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

Auto Trait Implementations

impl<N> Send for Bits1<N> where
    N: Send

impl<N> Sync for Bits1<N> where
    N: Sync

Blanket Implementations

impl<T> From for T[src]

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]