Built-In Protocols
Elixir comes with the following protocols:
- Enumerable and Collectable
- Inspect
- List.Chars
- String.Chars
To play with these, we’ll implement a trivial datatype that represents the collection of 0s and 1s in an integer. The underlying representation is trivial:
| defmodule Bitmap do |
| defstruct value: 0 |
| |
| @doc """ |
| A simple accessor for the 2^bit value in an integer |
| |
| iex> b = %Bitmap{value: 5} |
| %Bitmap{value: 5} |
| iex> Bitmap.fetch_bit(b,2) |
| 1 |
| iex> Bitmap.fetch_bit(b,1) |
| 0 |
| iex> Bitmap.fetch_bit(b,0) |
| 1 |
| """ |
| def fetch_bit(%Bitmap{value: value}, bit) do |
| use Bitwise |
| |
| (value >>> bit) &&& 1 |
| end |
| end |
The fetch_bit function uses the >>> and &&& functions in ...
Get Programming Elixir 1.2 now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.