Module
pooka/bit_array
src/pooka/bit_array.pookaA bit array is a parcel whose wrapping need not end on a byte boundary.
Build bitstrings, concatenate parts and convert UTF-8 text. Size operations distinguish bits from bytes. Byte slicing and text decoding report their public error variants for the supported invalid-input cases.
import pooka/bit_array
assert bit_array.bit_size(<<1:size(3)>>) == 3
API reference
enum BitArrayError
BitArrayError.OutOfRange
BitArrayError.InvalidUtf8
byte_size(bits: BitArray) -> Int
INFERRED
fn(BitArray) -> IntReturn the runtime byte size; a partial final byte still occupies a byte of size.
import pooka/bit_array
assert bit_array.byte_size(<<1:size(3)>>) == 1
bit_size(bits: BitArray) -> Int
INFERRED
fn(BitArray) -> IntCount every bit, including a non-byte-aligned suffix.
import pooka/bit_array
assert bit_array.bit_size(<<1:size(3)>>) == 3
is_empty(bits: BitArray) -> Bool
INFERRED
fn(BitArray) -> BoolAsk whether there are no bits.
import pooka/bit_array
assert bit_array.is_empty(<<>>)
append(first: BitArray, second: BitArray) -> BitArray
INFERRED
fn(BitArray, BitArray) -> BitArrayConcatenate two bit arrays, preserving all bits in order.
import pooka/bit_array
assert bit_array.append(<<1>>, <<2>>) == <<1, 2>>
concat(parts: List(BitArray)) -> BitArray
INFERRED
fn(List(BitArray)) -> BitArrayConcatenate all parts, including non-byte-aligned pieces.
import pooka/bit_array
assert bit_array.concat([<<1>>, <<2>>]) == <<1, 2>>
slice(bits: BitArray, start: Int, length: Int) -> Result(
BitArray,
BitArrayError
)
INFERRED
fn(BitArray, Int, Int) -> Result(BitArray, pooka/bit_array.BitArrayError)Select a byte range from a whole-byte array. Invalid bounds return OutOfRange.
import pooka/bit_array
assert bit_array.slice(<<1, 2, 3>>, 1, 1) == Ok(<<2>>)
from_string(text: String) -> BitArray
INFERRED
fn(String) -> BitArrayKeep the UTF-8 bytes of a Pooka string.
import pooka/bit_array
assert bit_array.from_string("A") == <<65>>
to_string(bits: BitArray) -> Result(String, BitArrayError)
INFERRED
fn(BitArray) -> Result(String, pooka/bit_array.BitArrayError)Decode UTF-8 bytes, returning InvalidUtf8 when decoding fails.
import pooka/bit_array
assert bit_array.to_string(<<65>>) == Ok("A")