bitfield: minor documentation and function tweaks (#10549)
parent
1469b47f7d
commit
c0b53048f5
|
@ -0,0 +1,11 @@
|
||||||
|
# Quickstart
|
||||||
|
|
||||||
|
`bitfield` is a module for
|
||||||
|
manipulating arrays of bits, i.e. series of zeroes and ones spread across an
|
||||||
|
array of storage units (unsigned 32-bit integers).
|
||||||
|
|
||||||
|
## BitField structure
|
||||||
|
|
||||||
|
Bit arrays are stored in data structures called 'BitField'. The structure is
|
||||||
|
'opaque', i.e. its internals are not available to the end user. This module
|
||||||
|
provides API (functions and methods) for accessing and modifying bit arrays.
|
|
@ -340,6 +340,8 @@ pub fn (instance BitField) clone() BitField {
|
||||||
|
|
||||||
// cmp compares two bit arrays bit by bit and returns 'true' if they are
|
// cmp compares two bit arrays bit by bit and returns 'true' if they are
|
||||||
// identical by length and contents and 'false' otherwise.
|
// identical by length and contents and 'false' otherwise.
|
||||||
|
[deprecated: 'use a == b instead']
|
||||||
|
[deprecated_after: '2021-06-29']
|
||||||
pub fn (instance BitField) cmp(input BitField) bool {
|
pub fn (instance BitField) cmp(input BitField) bool {
|
||||||
if instance.size != input.size {
|
if instance.size != input.size {
|
||||||
return false
|
return false
|
||||||
|
@ -352,6 +354,18 @@ pub fn (instance BitField) cmp(input BitField) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn (a BitField) == (b BitField) bool {
|
||||||
|
if a.size != b.size {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
for i in 0 .. zbitnslots(a.size) {
|
||||||
|
if a.field[i] != b.field[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
// pop_count returns the number of set bits (ones) in the array.
|
// pop_count returns the number of set bits (ones) in the array.
|
||||||
pub fn (instance BitField) pop_count() int {
|
pub fn (instance BitField) pop_count() int {
|
||||||
size := instance.size
|
size := instance.size
|
||||||
|
@ -391,7 +405,7 @@ pub fn (haystack BitField) pos(needle BitField) int {
|
||||||
}
|
}
|
||||||
for i := 0; i <= diff; i++ {
|
for i := 0; i <= diff; i++ {
|
||||||
needle_candidate := haystack.slice(i, needle_size + i)
|
needle_candidate := haystack.slice(i, needle_size + i)
|
||||||
if needle_candidate.cmp(needle) {
|
if needle_candidate == needle {
|
||||||
// needle matches a sub-array of haystack; return starting position of the sub-array
|
// needle matches a sub-array of haystack; return starting position of the sub-array
|
||||||
return i
|
return i
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,7 +68,7 @@ fn test_clone_cmp() {
|
||||||
}
|
}
|
||||||
output := input.clone()
|
output := input.clone()
|
||||||
assert output.get_size() == len
|
assert output.get_size() == len
|
||||||
assert input.cmp(output) == true
|
assert input == output
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_slice_join() {
|
fn test_slice_join() {
|
||||||
|
@ -86,7 +86,7 @@ fn test_slice_join() {
|
||||||
chunk2 := input.slice(point, input.get_size())
|
chunk2 := input.slice(point, input.get_size())
|
||||||
// concatenate them back into one and compare to the original
|
// concatenate them back into one and compare to the original
|
||||||
output := bitfield.join(chunk1, chunk2)
|
output := bitfield.join(chunk1, chunk2)
|
||||||
if !input.cmp(output) {
|
if input != output {
|
||||||
result = 0
|
result = 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue