Trait malachite_base::num::logic::traits::BitBlockAccess

source ·
pub trait BitBlockAccess: Sized {
    type Bits;

    // Required methods
    fn get_bits(&self, start: u64, end: u64) -> Self::Bits;
    fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits);

    // Provided method
    fn get_bits_owned(self, start: u64, end: u64) -> Self::Bits { ... }
}
Expand description

Defines functions that access or modify blocks of adjacent bits in a number.

Required Associated Types§

Required Methods§

source

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of bits whose first index is start and last index is end - 1.

source

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Assigns the least-significant end - start bits of bits to bits start through end - 1 (inclusive) of self.

Provided Methods§

source

fn get_bits_owned(self, start: u64, end: u64) -> Self::Bits

Extracts a block of bits whose first index is start and last index is end - 1, taking ownership of self.

§Worst-case complexity

For the default implementation, same as get_bits.

§Panics

For the default implementation, ee panics for get_bits.

§Examples
use malachite_base::num::logic::traits::BitBlockAccess;

assert_eq!((-0x5433i16).get_bits_owned(4, 8), 0xc);
assert_eq!((-0x5433i16).get_bits_owned(5, 9), 14);
assert_eq!((-0x5433i16).get_bits_owned(5, 5), 0);
assert_eq!((-0x5433i16).get_bits_owned(100, 104), 0xf);

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl BitBlockAccess for i8

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = u8

source§

impl BitBlockAccess for i16

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = u16

source§

impl BitBlockAccess for i32

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = u32

source§

impl BitBlockAccess for i64

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = u64

source§

impl BitBlockAccess for i128

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = u128

source§

impl BitBlockAccess for isize

source§

fn get_bits(&self, start: u64, end: u64) -> Self::Bits

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The type of the block of bits is the unsigned version of the input type. If end is greater than the type’s width, the high bits of the result are all 0, or all 1, depending on the input value’s sign; and if the input is negative and end - start is greater than the type’s width, the function panics.

If $n \geq 0$, let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

If $n < 0$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where

  • $W$ is the type’s width
  • for all $i$, $b_i\in \{0, 1\}$, and $b_i = 1$ for $i \geq W$. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$
§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end or (self < 0 and `end - start

W`).

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The type of the block of bits is the unsigned version of the input type. If bits has fewer bits than end - start, the high bits are interpreted as 0 or 1, depending on the sign of self. If end is greater than the type’s width, the high bits of bits must be 0 or 1, depending on the sign of self.

The sign of self remains unchanged, since only a finite number of bits are changed and the sign is determined by the implied infinite prefix of bits.

If $n \geq 0$ and $j \neq W - 1$, let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p - 1$. Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

If $n < 0$ or $j = W - 1$, let $$ 2^W + n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 1$ for all $i \geq W + p - 1$. Then $$ f(n, p, q, m) = \left ( \sum_{i=0}^{W-1} 2^{c_i} \right ) - 2^W, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width Panics if start < end, or if end >= W and bits W - start through end - start of bits are not equal to the original sign bit of self.

§Examples

See here.

§

type Bits = usize

source§

impl BitBlockAccess for u8

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = u8

source§

impl BitBlockAccess for u16

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = u16

source§

impl BitBlockAccess for u32

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = u32

source§

impl BitBlockAccess for u64

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = u64

source§

impl BitBlockAccess for u128

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = u128

source§

impl BitBlockAccess for usize

source§

fn get_bits(&self, start: u64, end: u64) -> Self

Extracts a block of adjacent bits from a number.

The first index is start and last index is end - 1.

The block of bits has the same type as the input. If end is greater than the type’s width, the high bits of the result are all 0.

Let $$ n = \sum_{i=0}^\infty 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$; so finitely many of the bits are 1, and the rest are 0. Then $$ f(n, p, q) = \sum_{i=p}^{q-1} 2^{b_{i-p}}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Panics if start < end.

§Examples

See here.

source§

fn assign_bits(&mut self, start: u64, end: u64, bits: &Self::Bits)

Replaces a block of adjacent bits in a number with other bits.

The least-significant end - start bits of bits are assigned to bits start through end - 1, inclusive, of self.

The block of bits has the same type as the input. If bits has fewer bits than `end

  • start, the high bits are interpreted as 0. If endis greater than the type's width, the high bits ofbits` must be 0.

Let $$ n = \sum_{i=0}^{W-1} 2^{b_i}, $$ where for all $i$, $b_i\in \{0, 1\}$ and $W$ is $t::WIDTH. Let $$ m = \sum_{i=0}^k 2^{d_i}, $$ where for all $i$, $d_i\in \{0, 1\}$. Also, let $p, q \in \mathbb{N}$, where $d_i = 0$ for all $i \geq W + p$.

Then $$ n \gets \sum_{i=0}^{W-1} 2^{c_i}, $$ where $$ \{c_0, c_1, c_2, \ldots, c_ {W-1}\} = \{b_0, b_1, b_2, \ldots, b_{p-1}, d_0, d_1, \ldots, d_{p-q-1}, b_q, \ldots, b_ {W-1}\}. $$

§Worst-case complexity

Constant time and additional memory.

§Panics

Let W be the type’s width. Panics if start < end, or if end > W and bits W - start through end - start of bits are nonzero.

§Examples

See here.

§

type Bits = usize

Implementors§