#low-level #bit #bit-manipulation #operations #predicates #programming #bitline

bittersweet

Add more intentional predicates to bitwise calcs

3 releases

0.1.2 Jul 17, 2023
0.1.1 Jul 16, 2023
0.1.0 Aug 10, 2022

#3 in #predicates

BSD-3-Clause

55KB
784 lines

bittersweet

Crates.io codecov License

Bittersweet is a library for bit manipulation.

Motivation

Bit-wise operations are often used in low-level programming and it sometimes contains magical bugs. I want to manipulate bits with more

  • type-safe
  • well-tested
  • well-documented
  • fast and efficient

Usage

Installation

You can install this library via cargo.

$ cargo add bittersweet

Or you can add this to your Cargo.toml manually.

Example

use bittersweet::bitline::{Bitline, Bitline8};
fn main() {
    let t = 0b00111000_u8 as Bitline8;
    if t.includes(0b00110000_u8) {
        println!("Yes!");
    }
}

Supported bitline length

Following Bitline traits are implemented for u8, u16, u32, u64, u128. So these operations keep zero-cost abstraction.

  • Bitline8 ... 8 bits (u8)
  • Bitline16 ... 16 bits (u16)
  • Bitline32 ... 32 bits (u32)
  • Bitline64 ... 64 bits (u64)
  • Bitline128 ... 128 bits (u128)

Documentation

See docs.rs

Manipulations

https://docs.rs/bittersweet/latest/bittersweet/bitline/trait.Bitline.html

  • as_empty
  • as_full
  • by_range
  • bytes_length
  • length
  • is_empty
  • is_not_empty
  • is_full
  • is_not_full
  • first_index
  • last_index
  • radius
  • around
  • with_around
  • first_bit
  • last_bit
  • first_bits
  • last_bits
  • filled_first_bit_to_last_bit
  • num_bits
  • bit_repr
  • range
  • includes
  • overlaps
  • range
  • remove

License

BSD-3-Clause

No runtime deps