1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

bf: add setall(), clearall(), string() and str2bf()

This commit is contained in:
Vitalie Ciubotaru
2019-07-15 00:56:48 +09:00
committed by Alexander Medvednikov
parent 7fa1f423e2
commit 9a3baf5609
2 changed files with 119 additions and 0 deletions

View File

@@ -64,6 +64,29 @@ fn cleartail(instance BitField) {
// public functions
pub fn str2bf(input string) BitField {
mut output := new(input.len)
for i := 0; i < input.len; i++ {
if input[i] != 48 {
output.setbit(i)
}
}
return output
}
pub fn (input BitField) string() string {
mut output := ''
for i := 0; i < input.size; i++ {
if input.getbit(i) == 1 {
output = output + '1'
}
else {
output = output + '0'
}
}
return output
}
pub fn new(size int) BitField {
output := BitField{
size: size
@@ -93,6 +116,19 @@ pub fn (instance mut BitField) clearbit(bitnr int) {
bitclear(instance, bitnr)
}
pub fn (instance mut BitField) setall() {
for i := 0; i < bitnslots(instance.size); i++ {
instance.field[i] = u32(-1)
}
cleartail(instance)
}
pub fn (instance mut BitField) clearall() {
for i := 0; i < bitnslots(instance.size); i++ {
instance.field[i] = u32(0)
}
}
pub fn (instance mut BitField) togglebit(bitnr int) {
if bitnr >= instance.size {return}
bittoggle(instance, bitnr)