# bittersweet

[](https://codecov.io/gh/kitsuyui/bittersweet)
[](https://opensource.org/licenses/BSD-3-Clause)
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.
```sh
$ cargo add bittersweet
```
Or you can add this to your `Cargo.toml` manually.
### Example
```rust
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](https://docs.rs/bittersweet/latest/bittersweet/)
## 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