pub struct Bitmap128(/* private fields */);
Expand description
A bitmap of length 128.
§Examples
// Creates an empty bitmap
use fixed_bitmaps::Bitmap128;
let mut bitmap = Bitmap128::default();
// Bitmaps implement Display so you can view what the map looks like
println!("Default bitmap: {}", bitmap);
// Bitmaps also convert to their respective unsigned int versions and back again easily
// Will show 0 as the value of the bitmap
println!("Value of bitmap: {}", bitmap.to_u128());
// Let's do the same as above, but actually setting the values in the bitmap to something
bitmap |= Bitmap128::from(101);
println!("Bitmap after OR-ing with 101: {}", bitmap);
// Set the 4th index (the 5th bit) to true. Can simply unwrap the result to ignore the warning,
//as we know for certain that 4 < 128
bitmap.set(4, true).unwrap();
// Will show that 117 (101 + 2^4) is the value of the bitmap
println!("Bitmap value: {}", bitmap.to_u128());
// Or you could use the deref operator for an even easier conversion
println!("Bitmap value: {}", *bitmap);
Implementations§
Source§impl Bitmap128
impl Bitmap128
pub fn capacity() -> usize
pub fn to_u128(&self) -> u128
Sourcepub fn new(value: bool) -> Bitmap128
pub fn new(value: bool) -> Bitmap128
Creates a new bitmap with all bits set to the given value.
§Example
use fixed_bitmaps::Bitmap128;
let a = Bitmap128::new(true);
assert_eq!(*a, u128::MAX);
let b = Bitmap128::new(false);
assert_eq!(*b, 0);
Sourcepub fn create_bit_mask(begin: usize, end: usize, value: bool) -> Bitmap128
pub fn create_bit_mask(begin: usize, end: usize, value: bool) -> Bitmap128
Create a new bitmap that has its bits set from begin
(inclusive) to end
(exclusive).
If begin is greater than the map length or end is 0, will return a bitmap with all bits set to
the opposite of value.
§Example
use fixed_bitmaps::Bitmap128;
let a = Bitmap128::create_bit_mask(3, 7, true);
assert_eq!(*a, 0b1111000);
let b = Bitmap128::create_bit_mask(3, 6, false); // Results in 1..1000111
assert_eq!(b, Bitmap128::new(true) ^ 0b111000);
Examples found in repository?
3fn main() {
4 // Creates an empty bitmap
5 let mut bitmap = Bitmap8::default();
6
7 // Bitmaps implement Display so you can view what the map looks like
8 println!("Default bitmap: {}", bitmap);
9
10 // Bitmaps also convert to their respective unsigned int versions and back again easily
11 println!("Value of bitmap: {}", bitmap.to_u8());
12
13 // Let's do the same as above, but actually setting the values in the bitmap to something
14 bitmap |= Bitmap8::from(101);
15
16 // Will show 01100101
17 println!("Bitmap after OR-ing with 101: {}", bitmap);
18
19 // Set the 4th index (the 5th bit) to true. Can simply unwrap the result to remove the warning, as we know
20 // for certain that 4 < 63
21 bitmap.set(4, true).unwrap();
22
23 // Will show that 117 (101 + 2^4) is the value of the bitmap
24 println!("Bitmap value: {}", bitmap.to_u8());
25
26 // Will print out the error thrown when trying to set an index out of bounds
27 match bitmap.set(8, true) {
28 Ok(_) => println!("That wasn't meant to happen... something's up with my implementation!"),
29 Err(error) => {
30 println!("Yep, threw an error as expected. Error message is as follows:");
31 eprintln!("{}", error);
32 }
33 }
34
35 let a = Bitmap8::from_set(2).unwrap();
36
37 // The above is equivalent to:
38 let b = Bitmap8::from(0b100);
39
40 assert!(a == b);
41
42 let bitmap = Bitmap8::create_bit_mask(3, 6, true);
43 println!("{}", bitmap);
44 println!("{}", *bitmap);
45 println!("{}", 0b111000);
46
47 println!("{:b}", u8::MAX << 3);
48
49 let bitmap = Bitmap8::create_bit_mask(3, 6, false);
50 println!("{}", bitmap);
51 println!("{:b}", u8::MAX.wrapping_shl(8));
52
53 let a = Bitmap128::create_bit_mask(3, 6, false);
54 let b = Bitmap128::create_bit_mask(7, 8, false);
55 let c = Bitmap128::create_bit_mask(0, 1, false);
56 let d = Bitmap128::create_bit_mask(0, 0, false);
57 let e = Bitmap128::create_bit_mask(8, 8, false);
58 let f = Bitmap128::create_bit_mask(0, Bitmap128::MAP_LENGTH, false);
59
60 println!("{}", a);
61 println!("{}", b);
62 println!("{}", c);
63 println!("{}", d);
64 println!("{}", e);
65 println!("{}", f);
66}
Sourcepub fn from_set(index: usize) -> Option<Bitmap128>
pub fn from_set(index: usize) -> Option<Bitmap128>
Creates a new, empty Bitmap128
, and sets the desired index before returning.
use fixed_bitmaps::Bitmap128;
let a = Bitmap128::from_set(5).unwrap();
// The above is equivalent to:
let mut b = Bitmap128::from(0);
b.set(5, true);
assert_eq!(a, b);
Sourcepub fn set(&mut self, index: usize, value: bool) -> Result<(), String>
pub fn set(&mut self, index: usize, value: bool) -> Result<(), String>
Sets the desired index, to the value provided. Note that indexing starts at 0.
§Returns
Returns a Result
based on the outcome. If an Err<String>
was returned,
it was because an out-of-bounds index was attempted to be set. In that
case the bitmap’s state remains unchanged.
§Example
use fixed_bitmaps::Bitmap128;
let mut bitmap = Bitmap128::default();
assert_eq!(*bitmap, 0);
bitmap.set(4, true);
assert_eq!(*bitmap, 16);
Sourcepub fn set_range(&mut self, begin: usize, end: usize, value: bool)
pub fn set_range(&mut self, begin: usize, end: usize, value: bool)
Set bits from begin (inclusive) to end (exclusive) to the given value.
§Example
use fixed_bitmaps::Bitmap128;
let mut bitmap = Bitmap128::default();
assert_eq!(*bitmap, 0);
bitmap.set_range(2, 7, true);
assert_eq!(*bitmap, 0b1111100);
bitmap.set_range(3, 5, false);
assert_eq!(*bitmap, 0b1100100);
Sourcepub fn get(&self, index: usize) -> Result<bool, String>
pub fn get(&self, index: usize) -> Result<bool, String>
Gets the bit at the given index. Note that indexing starts at 0.
§Returns
Returns a Result
based on the outcome.
If Ok<bool>
is returned, then the contained value in ok is the state
of the given bit
If an Err<String>
was returned, it was because you tried to get
an out-of-bounds index.
§Example
use fixed_bitmaps::Bitmap128;
let bitmap = Bitmap128::from(0b1010);
assert_eq!(bitmap.get(2).unwrap(), false);
assert_eq!(bitmap.get(3).unwrap(), true);
Trait Implementations§
Source§impl AddAssign<u128> for Bitmap128
impl AddAssign<u128> for Bitmap128
Source§fn add_assign(&mut self, rhs: u128)
fn add_assign(&mut self, rhs: u128)
+=
operation. Read moreSource§impl AddAssign for Bitmap128
impl AddAssign for Bitmap128
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl BitAndAssign<u128> for Bitmap128
impl BitAndAssign<u128> for Bitmap128
Source§fn bitand_assign(&mut self, rhs: u128)
fn bitand_assign(&mut self, rhs: u128)
&=
operation. Read moreSource§impl BitAndAssign for Bitmap128
impl BitAndAssign for Bitmap128
Source§fn bitand_assign(&mut self, rhs: Self)
fn bitand_assign(&mut self, rhs: Self)
&=
operation. Read moreSource§impl BitOrAssign<u128> for Bitmap128
impl BitOrAssign<u128> for Bitmap128
Source§fn bitor_assign(&mut self, rhs: u128)
fn bitor_assign(&mut self, rhs: u128)
|=
operation. Read moreSource§impl BitOrAssign for Bitmap128
impl BitOrAssign for Bitmap128
Source§fn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
|=
operation. Read moreSource§impl BitXorAssign<u128> for Bitmap128
impl BitXorAssign<u128> for Bitmap128
Source§fn bitxor_assign(&mut self, rhs: u128)
fn bitxor_assign(&mut self, rhs: u128)
^=
operation. Read moreSource§impl BitXorAssign for Bitmap128
impl BitXorAssign for Bitmap128
Source§fn bitxor_assign(&mut self, rhs: Self)
fn bitxor_assign(&mut self, rhs: Self)
^=
operation. Read moreSource§impl BitmapSize for Bitmap128
impl BitmapSize for Bitmap128
const MAP_LENGTH: usize = 128usize
Source§impl<'de> Deserialize<'de> for Bitmap128
impl<'de> Deserialize<'de> for Bitmap128
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl DivAssign<u128> for Bitmap128
impl DivAssign<u128> for Bitmap128
Source§fn div_assign(&mut self, rhs: u128)
fn div_assign(&mut self, rhs: u128)
/=
operation. Read moreSource§impl DivAssign for Bitmap128
impl DivAssign for Bitmap128
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
/=
operation. Read moreSource§impl MulAssign<u128> for Bitmap128
impl MulAssign<u128> for Bitmap128
Source§fn mul_assign(&mut self, rhs: u128)
fn mul_assign(&mut self, rhs: u128)
*=
operation. Read moreSource§impl MulAssign for Bitmap128
impl MulAssign for Bitmap128
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*=
operation. Read moreSource§impl Ord for Bitmap128
impl Ord for Bitmap128
Source§impl PartialOrd for Bitmap128
impl PartialOrd for Bitmap128
Source§impl ShlAssign<usize> for Bitmap128
impl ShlAssign<usize> for Bitmap128
Source§fn shl_assign(&mut self, rhs: usize)
fn shl_assign(&mut self, rhs: usize)
<<=
operation. Read moreSource§impl ShrAssign<usize> for Bitmap128
impl ShrAssign<usize> for Bitmap128
Source§fn shr_assign(&mut self, rhs: usize)
fn shr_assign(&mut self, rhs: usize)
>>=
operation. Read moreSource§impl SubAssign<u128> for Bitmap128
impl SubAssign<u128> for Bitmap128
Source§fn sub_assign(&mut self, rhs: u128)
fn sub_assign(&mut self, rhs: u128)
-=
operation. Read moreSource§impl SubAssign for Bitmap128
impl SubAssign for Bitmap128
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read more