zo-bitarray
v1.0.2
Published
Memory efficient Boolean array implementation
Downloads
18
Maintainers
Readme
bitarray
Memory efficient Boolean array implementation, very easy to use
Installation
npm install zo-bitarray --save
Usage
const BitArray = require('zo-bitarray')
let ba = new BitArray('1010101010')
ba.get(0) //1
ba.count() //5
ba.set(3, 1) // ba.get(3) -> 1
ba.not(3) // ba.get(3) -> 0
for(let v of ba){
//v is assigned to 1,0,1,0,1,0,1,0,1,0 in order
}
ba.forExist(i => {
ba.get(i) // always 1
})
API
Constructor
- constructor(lenght, val=0)
- constructor(data)
new BitArray(10) //0000000000
new BitArray(10, 1) //1111111111
new BitArray([1,0,1,0,1,0,1,0,1,0]) // 1010101010
let ba = new BitArray('1010101010') // 1010101010
new BitArray(ba) // 1010101010
let data = { //Usually get from rawData()
length: 100,
rawdata: [1227133513, 2454267026, 613566756, 9]
}
ba = new BitArray(data) // 100100100.....1001 100 bits
//string start with '@' from compactData()
ba = new BitArray('@0001fnHfD-L1u=Zb$7!A00009') // 100100100.....1001 100 bits
Attribute
- length
- count()
- blockSize()
- blockBitNum()
Traversing Data
- for of
- forEach(cb)
- forExist(cb)
- entries()
let ba = new BitArray('1010101010')
let s = ''
for(let v of ba){
s += v
} // s == '1010101010'
s = ''
ba.forEach((v, i) => {
s += v
}) // s == '1010101010'
s = ''
ba.forExist(i => {
s += i
}) // s == '02468'
s = ''
for (let [i, v] of ba.entries()) {
s += i + ':' + v + ','
} // s == '0:1,1:0,2:1,3:0,4:1,5:0,6:1,7:0,8:1,9:0,'
assert(String(ba) == '1010101010')
Export Data
- toString()
- toArray()
- rawData()
- compactData()
let ba = new BitArray('1010101010')
ba.toString() //'1010101010'
ba.toArray() // [1,0,1,0,1,0,1,0,1,0]
//More efficient data
ba.rawData() // {length:10,rawdata:[341]}
//More compact data
ba.compactData() //'@0000a00041'
Bit Operation
get
(index)set
(index, val)and
(other)and
(index, val)or
(other)or
(index, val)not
(index)not
()xor
(index, val)xor
(other)
Other
fill
(val, begin, end)cover
(other, begin, end)swap
(other, begin, end)