pub struct Bitmap64(/* private fields */);
Expand description
A bitmap of length 64.
§Examples
// Creates an empty bitmap
use fixed_bitmaps::Bitmap64;
let mut bitmap = Bitmap64::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_u64());
// Let's do the same as above, but actually setting the values in the bitmap to something
bitmap |= Bitmap64::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 < 64
bitmap.set(4, true).unwrap();
// Will show that 117 (101 + 2^4) is the value of the bitmap
println!("Bitmap value: {}", bitmap.to_u64());
// Or you could use the deref operator for an even easier conversion
println!("Bitmap value: {}", *bitmap);
Implementations§
Source§impl Bitmap64
impl Bitmap64
pub fn capacity() -> usize
Sourcepub fn to_u64(&self) -> u64
pub fn to_u64(&self) -> u64
Examples found in repository?
3fn main() {
4 // Creates an empty bitmap
5 let mut bitmap = Bitmap64::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_u64());
12
13 // Let's do the same as above, but actually setting the values in the bitmap to something
14 bitmap |= Bitmap64::from(101);
15
16 // Will show 0000000000000000000000000000000000000000000000000000000001100101
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_u64());
25
26 // Will print out the error thrown when trying to set an index out of bounds
27 match bitmap.set(64, 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 // Multiple ways to create a new bitmap
36 let _empty = Bitmap64::default();
37 let _full = Bitmap64::from(u64::MAX);
38
39 // Equivalent ways to create a bitmap with last bits 1001
40 let _bitmap = Bitmap64::from(9);
41 let _bitmap = Bitmap64::from(0b1001);
42
43 // Sets the 7th least significant bit when creating a new bitmap (indexing starts at 0)
44 let mut bitmap = Bitmap64::from_set(6).unwrap();
45
46 // Use the set() method to work with specific bits
47 bitmap.set(6, false).unwrap();
48 bitmap.set(42, true).unwrap();
49
50 // Use get() to know the value of a specific bit
51 println!("Bit at index 42: {}", bitmap.get(42).unwrap());
52
53 // Freely use boolean operators &, |, and ^
54 let bitmap1 = Bitmap64::from(0b1001);
55 let bitmap2 = Bitmap64::from(0b1010);
56
57 let _and = bitmap1 & bitmap2;
58 let _or = bitmap1 | bitmap2;
59 let _xor = bitmap1 ^ bitmap2;
60
61 // Aritmetic operators are currently used as exactly that, the following is guarunteed to continue working as it does
62 let _add = bitmap1 + 10;
63 let _sub = bitmap1 - 4;
64 let _mul = bitmap2 * 2;
65 let _div = bitmap2 / 2;
66
67 // The following works exactly as above, but is likely to change in favour of set operations in the major update to 1.0.0
68 let _add = bitmap1 + Bitmap64::from(10);
69 let _sub = bitmap1 - Bitmap64::from(4);
70 let _mul = bitmap2 * Bitmap64::from(2);
71 let _div = bitmap2 / Bitmap64::from(2);
72}
Sourcepub fn new(value: bool) -> Bitmap64
pub fn new(value: bool) -> Bitmap64
Creates a new bitmap with all bits set to the given value.
§Example
use fixed_bitmaps::Bitmap64;
let a = Bitmap64::new(true);
assert_eq!(*a, u64::MAX);
let b = Bitmap64::new(false);
assert_eq!(*b, 0);
Sourcepub fn create_bit_mask(begin: usize, end: usize, value: bool) -> Bitmap64
pub fn create_bit_mask(begin: usize, end: usize, value: bool) -> Bitmap64
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::Bitmap64;
let a = Bitmap64::create_bit_mask(3, 7, true);
assert_eq!(*a, 0b1111000);
let b = Bitmap64::create_bit_mask(3, 6, false); // Results in 1..1000111
assert_eq!(b, Bitmap64::new(true) ^ 0b111000);
Sourcepub fn from_set(index: usize) -> Option<Bitmap64>
pub fn from_set(index: usize) -> Option<Bitmap64>
Creates a new, empty Bitmap64
, and sets the desired index before returning.
use fixed_bitmaps::Bitmap64;
let a = Bitmap64::from_set(5).unwrap();
// The above is equivalent to:
let mut b = Bitmap64::from(0);
b.set(5, true);
assert_eq!(a, b);
Examples found in repository?
3fn main() {
4 // Creates an empty bitmap
5 let mut bitmap = Bitmap64::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_u64());
12
13 // Let's do the same as above, but actually setting the values in the bitmap to something
14 bitmap |= Bitmap64::from(101);
15
16 // Will show 0000000000000000000000000000000000000000000000000000000001100101
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_u64());
25
26 // Will print out the error thrown when trying to set an index out of bounds
27 match bitmap.set(64, 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 // Multiple ways to create a new bitmap
36 let _empty = Bitmap64::default();
37 let _full = Bitmap64::from(u64::MAX);
38
39 // Equivalent ways to create a bitmap with last bits 1001
40 let _bitmap = Bitmap64::from(9);
41 let _bitmap = Bitmap64::from(0b1001);
42
43 // Sets the 7th least significant bit when creating a new bitmap (indexing starts at 0)
44 let mut bitmap = Bitmap64::from_set(6).unwrap();
45
46 // Use the set() method to work with specific bits
47 bitmap.set(6, false).unwrap();
48 bitmap.set(42, true).unwrap();
49
50 // Use get() to know the value of a specific bit
51 println!("Bit at index 42: {}", bitmap.get(42).unwrap());
52
53 // Freely use boolean operators &, |, and ^
54 let bitmap1 = Bitmap64::from(0b1001);
55 let bitmap2 = Bitmap64::from(0b1010);
56
57 let _and = bitmap1 & bitmap2;
58 let _or = bitmap1 | bitmap2;
59 let _xor = bitmap1 ^ bitmap2;
60
61 // Aritmetic operators are currently used as exactly that, the following is guarunteed to continue working as it does
62 let _add = bitmap1 + 10;
63 let _sub = bitmap1 - 4;
64 let _mul = bitmap2 * 2;
65 let _div = bitmap2 / 2;
66
67 // The following works exactly as above, but is likely to change in favour of set operations in the major update to 1.0.0
68 let _add = bitmap1 + Bitmap64::from(10);
69 let _sub = bitmap1 - Bitmap64::from(4);
70 let _mul = bitmap2 * Bitmap64::from(2);
71 let _div = bitmap2 / Bitmap64::from(2);
72}
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::Bitmap64;
let mut bitmap = Bitmap64::default();
assert_eq!(*bitmap, 0);
bitmap.set(4, true);
assert_eq!(*bitmap, 16);
Examples found in repository?
3fn main() {
4 // Creates an empty bitmap
5 let mut bitmap = Bitmap64::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_u64());
12
13 // Let's do the same as above, but actually setting the values in the bitmap to something
14 bitmap |= Bitmap64::from(101);
15
16 // Will show 0000000000000000000000000000000000000000000000000000000001100101
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_u64());
25
26 // Will print out the error thrown when trying to set an index out of bounds
27 match bitmap.set(64, 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 // Multiple ways to create a new bitmap
36 let _empty = Bitmap64::default();
37 let _full = Bitmap64::from(u64::MAX);
38
39 // Equivalent ways to create a bitmap with last bits 1001
40 let _bitmap = Bitmap64::from(9);
41 let _bitmap = Bitmap64::from(0b1001);
42
43 // Sets the 7th least significant bit when creating a new bitmap (indexing starts at 0)
44 let mut bitmap = Bitmap64::from_set(6).unwrap();
45
46 // Use the set() method to work with specific bits
47 bitmap.set(6, false).unwrap();
48 bitmap.set(42, true).unwrap();
49
50 // Use get() to know the value of a specific bit
51 println!("Bit at index 42: {}", bitmap.get(42).unwrap());
52
53 // Freely use boolean operators &, |, and ^
54 let bitmap1 = Bitmap64::from(0b1001);
55 let bitmap2 = Bitmap64::from(0b1010);
56
57 let _and = bitmap1 & bitmap2;
58 let _or = bitmap1 | bitmap2;
59 let _xor = bitmap1 ^ bitmap2;
60
61 // Aritmetic operators are currently used as exactly that, the following is guarunteed to continue working as it does
62 let _add = bitmap1 + 10;
63 let _sub = bitmap1 - 4;
64 let _mul = bitmap2 * 2;
65 let _div = bitmap2 / 2;
66
67 // The following works exactly as above, but is likely to change in favour of set operations in the major update to 1.0.0
68 let _add = bitmap1 + Bitmap64::from(10);
69 let _sub = bitmap1 - Bitmap64::from(4);
70 let _mul = bitmap2 * Bitmap64::from(2);
71 let _div = bitmap2 / Bitmap64::from(2);
72}
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::Bitmap64;
let mut bitmap = Bitmap64::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::Bitmap64;
let bitmap = Bitmap64::from(0b1010);
assert_eq!(bitmap.get(2).unwrap(), false);
assert_eq!(bitmap.get(3).unwrap(), true);
Examples found in repository?
3fn main() {
4 // Creates an empty bitmap
5 let mut bitmap = Bitmap64::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_u64());
12
13 // Let's do the same as above, but actually setting the values in the bitmap to something
14 bitmap |= Bitmap64::from(101);
15
16 // Will show 0000000000000000000000000000000000000000000000000000000001100101
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_u64());
25
26 // Will print out the error thrown when trying to set an index out of bounds
27 match bitmap.set(64, 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 // Multiple ways to create a new bitmap
36 let _empty = Bitmap64::default();
37 let _full = Bitmap64::from(u64::MAX);
38
39 // Equivalent ways to create a bitmap with last bits 1001
40 let _bitmap = Bitmap64::from(9);
41 let _bitmap = Bitmap64::from(0b1001);
42
43 // Sets the 7th least significant bit when creating a new bitmap (indexing starts at 0)
44 let mut bitmap = Bitmap64::from_set(6).unwrap();
45
46 // Use the set() method to work with specific bits
47 bitmap.set(6, false).unwrap();
48 bitmap.set(42, true).unwrap();
49
50 // Use get() to know the value of a specific bit
51 println!("Bit at index 42: {}", bitmap.get(42).unwrap());
52
53 // Freely use boolean operators &, |, and ^
54 let bitmap1 = Bitmap64::from(0b1001);
55 let bitmap2 = Bitmap64::from(0b1010);
56
57 let _and = bitmap1 & bitmap2;
58 let _or = bitmap1 | bitmap2;
59 let _xor = bitmap1 ^ bitmap2;
60
61 // Aritmetic operators are currently used as exactly that, the following is guarunteed to continue working as it does
62 let _add = bitmap1 + 10;
63 let _sub = bitmap1 - 4;
64 let _mul = bitmap2 * 2;
65 let _div = bitmap2 / 2;
66
67 // The following works exactly as above, but is likely to change in favour of set operations in the major update to 1.0.0
68 let _add = bitmap1 + Bitmap64::from(10);
69 let _sub = bitmap1 - Bitmap64::from(4);
70 let _mul = bitmap2 * Bitmap64::from(2);
71 let _div = bitmap2 / Bitmap64::from(2);
72}
Trait Implementations§
Source§impl AddAssign<u64> for Bitmap64
impl AddAssign<u64> for Bitmap64
Source§fn add_assign(&mut self, rhs: u64)
fn add_assign(&mut self, rhs: u64)
+=
operation. Read moreSource§impl AddAssign for Bitmap64
impl AddAssign for Bitmap64
Source§fn add_assign(&mut self, rhs: Self)
fn add_assign(&mut self, rhs: Self)
+=
operation. Read moreSource§impl BitAndAssign<u64> for Bitmap64
impl BitAndAssign<u64> for Bitmap64
Source§fn bitand_assign(&mut self, rhs: u64)
fn bitand_assign(&mut self, rhs: u64)
&=
operation. Read moreSource§impl BitAndAssign for Bitmap64
impl BitAndAssign for Bitmap64
Source§fn bitand_assign(&mut self, rhs: Self)
fn bitand_assign(&mut self, rhs: Self)
&=
operation. Read moreSource§impl BitOrAssign<u64> for Bitmap64
impl BitOrAssign<u64> for Bitmap64
Source§fn bitor_assign(&mut self, rhs: u64)
fn bitor_assign(&mut self, rhs: u64)
|=
operation. Read moreSource§impl BitOrAssign for Bitmap64
impl BitOrAssign for Bitmap64
Source§fn bitor_assign(&mut self, rhs: Self)
fn bitor_assign(&mut self, rhs: Self)
|=
operation. Read moreSource§impl BitXorAssign<u64> for Bitmap64
impl BitXorAssign<u64> for Bitmap64
Source§fn bitxor_assign(&mut self, rhs: u64)
fn bitxor_assign(&mut self, rhs: u64)
^=
operation. Read moreSource§impl BitXorAssign for Bitmap64
impl BitXorAssign for Bitmap64
Source§fn bitxor_assign(&mut self, rhs: Self)
fn bitxor_assign(&mut self, rhs: Self)
^=
operation. Read moreSource§impl BitmapSize for Bitmap64
impl BitmapSize for Bitmap64
const MAP_LENGTH: usize = 64usize
Source§impl<'de> Deserialize<'de> for Bitmap64
impl<'de> Deserialize<'de> for Bitmap64
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<u64> for Bitmap64
impl DivAssign<u64> for Bitmap64
Source§fn div_assign(&mut self, rhs: u64)
fn div_assign(&mut self, rhs: u64)
/=
operation. Read moreSource§impl DivAssign for Bitmap64
impl DivAssign for Bitmap64
Source§fn div_assign(&mut self, rhs: Self)
fn div_assign(&mut self, rhs: Self)
/=
operation. Read moreSource§impl MulAssign<u64> for Bitmap64
impl MulAssign<u64> for Bitmap64
Source§fn mul_assign(&mut self, rhs: u64)
fn mul_assign(&mut self, rhs: u64)
*=
operation. Read moreSource§impl MulAssign for Bitmap64
impl MulAssign for Bitmap64
Source§fn mul_assign(&mut self, rhs: Self)
fn mul_assign(&mut self, rhs: Self)
*=
operation. Read moreSource§impl Ord for Bitmap64
impl Ord for Bitmap64
Source§impl PartialOrd for Bitmap64
impl PartialOrd for Bitmap64
Source§impl ShlAssign<usize> for Bitmap64
impl ShlAssign<usize> for Bitmap64
Source§fn shl_assign(&mut self, rhs: usize)
fn shl_assign(&mut self, rhs: usize)
<<=
operation. Read moreSource§impl ShrAssign<usize> for Bitmap64
impl ShrAssign<usize> for Bitmap64
Source§fn shr_assign(&mut self, rhs: usize)
fn shr_assign(&mut self, rhs: usize)
>>=
operation. Read moreSource§impl SubAssign<u64> for Bitmap64
impl SubAssign<u64> for Bitmap64
Source§fn sub_assign(&mut self, rhs: u64)
fn sub_assign(&mut self, rhs: u64)
-=
operation. Read moreSource§impl SubAssign for Bitmap64
impl SubAssign for Bitmap64
Source§fn sub_assign(&mut self, rhs: Self)
fn sub_assign(&mut self, rhs: Self)
-=
operation. Read more