mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
unset function
unset function, clear single bits
This commit is contained in:
@@ -185,6 +185,33 @@ set :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
In:
|
||||||
|
- ba: ^Bit_Array - a pointer to the Bit Array
|
||||||
|
- index: The bit index. Can be an enum member.
|
||||||
|
|
||||||
|
Out:
|
||||||
|
- ok: Whether or not we managed to unset requested bit.
|
||||||
|
|
||||||
|
`unset` automatically resizes the Bit Array to accommodate the requested index if needed.
|
||||||
|
*/
|
||||||
|
unset :: proc(ba: ^Bit_Array, #any_int index: uint, allocator := context.allocator) -> (ok: bool) {
|
||||||
|
|
||||||
|
idx := int(index) - ba.bias
|
||||||
|
|
||||||
|
if ba == nil || int(index) < ba.bias { return false }
|
||||||
|
context.allocator = allocator
|
||||||
|
|
||||||
|
leg_index := idx >> INDEX_SHIFT
|
||||||
|
bit_index := idx & INDEX_MASK
|
||||||
|
|
||||||
|
resize_if_needed(ba, leg_index) or_return
|
||||||
|
|
||||||
|
ba.max_index = max(idx, ba.max_index)
|
||||||
|
ba.bits[leg_index] &= ~(1 << uint(bit_index))
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
|
A helper function to create a Bit Array with optional bias, in case your smallest index is non-zero (including negative).
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user