crispii_bits 1.0.0

Bit related functionality intended for use with Crispii
Documentation

crispii_bits

Overview

Bit operations made safe.

Useful for situations where you're emulating CPU registers or need to carry out bit-level operations on Rust's native unsigned integer types (usize excluded).

Provides three extension methods for each:

  • add_with_carry -> Returns a tuple containing the resulting u{int} value, and a Vec of all of the bit positions where carries occurred (the bit that overflowed to the next bit on the left, not the destination bit of the overlow)
  • set_bit -> Sets the bit on (1) or off (0) at the position specified
  • flip_bit -> Flips the bit (0 -> 1 || 1 -> 0) at the position specified

Each of these methods uses a respective PosU{int} enum for bit selection, guaranteeing safety, though the try_into method is available on the u8 type if desired.

The former approach is less cumbersome in practice:

use crispii_bits::u8::*;

let result: u8 = 0b0100_0000.flip_bit(PosU8::B6);

vs.

use crispii_bits::u8::*;

let result: u8 = 0b0100_0000.flip_bit(6.try_into().unwrap());

Importing

Importing the crate is as simple as importing * from the u{int} module that matches the native u{int} type you want to use.

For example, a u16:

use crispii_bits::u16::*;

License: MIT OR Apache-2.0