Bitmap
Contains functions to create and work with a bitmap
Bitmaps are also known as bit arrays, bit sets and is a fast space efficient data structure for lookups
The module has been designed to be pipe-friendly, so pipe ‘em up
Summary
| at(bitmap, index) | Returns the bit value at |
| new(argument) | Creates and returns a bitmap of size corresponding to the |
| set(bitmap, index) | Sets the bit at |
| set?(bitmap, index) | Returns a boolean representing whether the bit at position |
| set_all(bitmap) | Set all bits in the bitmap and returns a new bitmap |
| toggle(bitmap, index) | Toggles the bit at |
| toggle_all(bitmap) | Toggles all bits in the bitmap and returns a new bitmap |
| unset(bitmap, index) | Unsets the bit at |
| unset_all(bitmap) | Unsets all bits in the bitmap and returns a new bitmap |
Functions
Returns the bit value at index in the bitmap
Examples
iex> bm = Bitmap.new(5)
iex> Bitmap.at(bm, 2)
0
iex> bm = Bitmap.set(bm, 2)
iex> Bitmap.at(bm, 2)
1
Creates and returns a bitmap of size corresponding to the argument passed.
If argument is
- integer, size of bitmap is equal to the
argument - range, size of bitmap is equal to the length of
argument - list, size of bitmap is equal to the length of
argument
Note: All bits are set to 0 by default
Examples
iex> Bitmap.new(400)
<<0::size(400)>>
iex> Bitmap.new([1,2,3,4,5])
<<0::size(5)>>
iex> Bitmap.new(1..25)
<<0::size(25)>>
Sets the bit at index in the bitmap and returns the new bitmap
Index can also have a value :all in which case all bits
will be set like in set_all
Examples
iex> Bitmap.set(Bitmap.new(5), 3)
<<2::size(5)>>
iex> Bitmap.set(Bitmap.new(1..10), 2)
<<32, 0::size(2)>>
Returns a boolean representing whether the bit at position index
is set or not
Examples
iex> bm = Bitmap.new(5) |> Bitmap.set(1) |> Bitmap.set(3)
iex> Bitmap.set?(bm, 1)
true
iex> Bitmap.set?(bm, 4)
false
Set all bits in the bitmap and returns a new bitmap
Examples
iex> Bitmap.set_all(Bitmap.new(10))
<<255, 3::size(2)>>
iex> Bitmap.set_all(Bitmap.new(100))
<<255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 15::size(4)>>
Toggles the bit at index in the bitmap and returns the new bitmap.
i.e. it sets the bit to 1 if it was 0 or sets the bit to 0 if it was 1
Index can also have a value :all in which case all bits will be toggled
like in toggle_all
Examples
iex> bm = Bitmap.new(10) |> Bitmap.set(4) |> Bitmap.set(8)
iex> Bitmap.toggle(bm, 3)
<<24, 2::size(2)>>
iex> Bitmap.toggle(bm, 6)
<<10, 2::size(2)>>
Toggles all bits in the bitmap and returns a new bitmap
Examples
iex> bm = Bitmap.new(10) |> Bitmap.set(4) |> Bitmap.set(8)
iex> Bitmap.toggle_all(bm)
<<247, 1::size(2)>>
Unsets the bit at index in the bitmap and returns the new bitmap.
Index can also have a value :all in which case all bits
will be unset like in unset_all
Examples
iex> bm = Bitmap.new(10) |> Bitmap.set(4) |> Bitmap.set(8)
iex> Bitmap.unset(bm, 4)
<<0, 2::size(2)>>
iex> Bitmap.unset(bm, 8)
<<8, 0::size(2)>>
Unsets all bits in the bitmap and returns a new bitmap
Examples
iex> bm = Bitmap.new(10) |> Bitmap.set(4) |> Bitmap.set(8)
iex> Bitmap.unset_all(bm)
<<0, 0::size(2)>>