package core:container/bit_array
Overview
A dynamically-sized array of bits.
The Bit Array can be used in several ways:
By default you don't need to instantiate a Bit_Array.
Example:
package test
import "core:fmt"
import "core:container/bit_array"
main :: proc() {
using bit_array
bits: Bit_Array
// returns `true`
fmt.println(set(&bits, 42))
// returns `false`, `false`, because this Bit Array wasn't created to allow negative indices.
was_set, was_retrieved := get(&bits, -1)
fmt.println(was_set, was_retrieved)
destroy(&bits)
}
A Bit_Array can optionally allow for negative indices, if the minimum value was given during creation.
Example:
package test
import "core:fmt"
import "core:container/bit_array"
main :: proc() {
Foo :: enum int {
Negative_Test = -42,
Bar = 420,
Leaves = 69105,
}
using bit_array
bits := create(int(max(Foo)), int(min(Foo)))
defer destroy(bits)
fmt.printf("Set(Bar): %v\n", set(bits, Foo.Bar))
fmt.printf("Get(Bar): %v, %v\n", get(bits, Foo.Bar))
fmt.printf("Set(Negative_Test): %v\n", set(bits, Foo.Negative_Test))
fmt.printf("Get(Leaves): %v, %v\n", get(bits, Foo.Leaves))
fmt.printf("Get(Negative_Test): %v, %v\n", get(bits, Foo.Negative_Test))
fmt.printf("Freed.\n")
}
Types
Constants
This section is empty.
Variables
This section is empty.
Procedures
clear ¶
clear :: proc(ba: ^Bit_Array) {…}
Sets all values in the Bit_Array to zero.
Inputs:
ba: The target Bit_Array
create ¶
create :: proc(max_index: int, min_index: int = 0, allocator := context.allocator) -> (res: ^Bit_Array, ok: bool) #optional_ok {…}
A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
The range of bits created by this procedure is min_index..<max_index, and the
array will be able to expand beyond max_index if needed.
Allocates (`new(Bit_Array) & make(ba.bits)`)
Inputs:
max_index: maximum starting index
min_index: minimum starting index (used as a bias)
allocator: (default is context.allocator)
Returns:
ba: Allocates a bit_Array, backing data is set to max-min / 64 indices, rounded up (eg 65 - 0 allocates for [2]u64).
destroy ¶
destroy :: proc(ba: ^Bit_Array) {…}
Deallocates the Bit_Array and its backing storage
Inputs:
ba: The target Bit_Array
get ¶
Gets the state of a bit in the bit-array
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
Returns:
res: true if the bit at index is set.
ok: Whether the index was valid. Returns false if the index is smaller than the bias.
init ¶
init :: proc(res: ^Bit_Array, max_index: int, min_index: int = 0, allocator := context.allocator) -> (ok: bool) {…}
A helper function to initialize a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
The range of bits created by this procedure is min_index..<max_index, and the
array will be able to expand beyond max_index if needed.
Allocates (`make(ba.bits)`)
Inputs:
max_index: maximum starting index
min_index: minimum starting index (used as a bias)
allocator: (default is context.allocator)
iterate_by_all ¶
iterate_by_all :: proc(it: ^Bit_Array_Iterator) -> (set: bool, index: int, ok: bool) {…}
Returns the next bit, including its set-state. ok=false once exhausted
Inputs:
it: The iterator that holds the state.
Returns:
set: true if the bit at index is set.
index: The next bit of the Bit_Array referenced by it.
ok: true if the iterator can continue, false if the iterator is done
iterate_by_set ¶
iterate_by_set :: proc(it: ^Bit_Array_Iterator) -> (index: int, ok: bool) {…}
Returns the next Set Bit, for example if 0b1010, then the iterator will return index={1, 3} over two calls.
Inputs:
it: The iterator that holds the state.
Returns:
index: The next set bit of the Bit_Array referenced by it.
ok: true if the iterator can continue, false if the iterator is done
iterate_by_unset ¶
iterate_by_unset :: proc(it: ^Bit_Array_Iterator) -> (index: int, ok: bool) {…}
Returns the next Unset Bit, for example if 0b1010, then the iterator will return index={0, 2} over two calls.
Inputs:
it: The iterator that holds the state.
Returns:
index: The next unset bit of the Bit_Array referenced by it.
ok: true if the iterator can continue, false if the iterator is done
len ¶
Gets the length of set and unset valid bits in the Bit_Array.
Inputs:
ba: The target Bit_Array
Returns:
length: The length of valid bits.
make_iterator ¶
make_iterator :: proc(ba: ^Bit_Array) -> (it: Bit_Array_Iterator) {…}
Wraps a Bit_Array into an Iterator
Inputs:
ba: Pointer to the Bit_Array
Returns:
it: Iterator struct
set ¶
set :: proc(ba: ^Bit_Array, #any_int index: uint, set_to: bool = true, allocator := context.allocator) -> (ok: bool) {…}
Sets the state of a bit in the bit-array
Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
set_to: true sets the bit on, false to turn it off
allocator: (default is context.allocator)
Returns:
ok: Whether the set was successful, false on allocation failure or bad index
shrink ¶
shrink :: proc(ba: ^Bit_Array) {…}
Shrinks the Bit_Array's backing storage to the smallest possible size.
Inputs:
ba: The target Bit_Array
unsafe_get ¶
Gets the state of a bit in the bit-array
Bypasses all Checks
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
Returns:true if bit is set
unsafe_set ¶
Sets the state of a bit in the bit-array
Bypasses all checks
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
unsafe_unset ¶
Unsets the state of a bit in the bit-array
Bypasses all Checks
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
unset ¶
unset :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) {…}
Unsets the state of a bit in the bit-array. (Convienence wrapper for set)
Conditionally Allocates (Resizes backing data when `index > len(ba.bits)`)
Inputs:
ba: Pointer to the Bit_Array
index: Which bit in the array
allocator: (default is context.allocator)
Returns:
ok: Whether the unset was successful, false on allocation failure or bad index
Procedure Groups
This section is empty.
Source Files
Generation Information
Generated with odin version dev-2026-09 (vendor "odin") Windows_amd64 @ 2026-09-08 15:54:50.713275100 +0000 UTC