47 lines
1.2 KiB
Rust
47 lines
1.2 KiB
Rust
use std::sync::{Arc};
|
|
use crate::macros::wrap_uniffi_object;
|
|
|
|
wrap_uniffi_object!(DisplayBitVec, BitVec);
|
|
|
|
#[uniffi::export]
|
|
impl BitVec {
|
|
#[uniffi::constructor]
|
|
pub fn new(size: u64) -> Arc<Self> {
|
|
Self::internal_new(servicepoint::DisplayBitVec::repeat(false, size as usize))
|
|
}
|
|
#[uniffi::constructor]
|
|
pub fn load(data: Vec<u8>) -> Arc<Self> {
|
|
Self::internal_new(servicepoint::DisplayBitVec::from_slice(&data))
|
|
}
|
|
|
|
pub fn set(&self, index: u64, value: bool) {
|
|
self.actual.write().unwrap().set(index as usize, value)
|
|
}
|
|
|
|
pub fn get(&self, index: u64) -> bool {
|
|
self.actual
|
|
.read()
|
|
.unwrap()
|
|
.get(index as usize)
|
|
.is_some_and(move |bit| *bit)
|
|
}
|
|
|
|
pub fn fill(&self, value: bool) {
|
|
self.actual.write().unwrap().fill(value)
|
|
}
|
|
|
|
pub fn len(&self) -> u64 {
|
|
self.actual.read().unwrap().len() as u64
|
|
}
|
|
|
|
pub fn equals(&self, other: &BitVec) -> bool {
|
|
let a = self.actual.read().unwrap();
|
|
let b = other.actual.read().unwrap();
|
|
*a == *b
|
|
}
|
|
|
|
pub fn copy_raw(&self) -> Vec<u8> {
|
|
self.actual.read().unwrap().clone().into_vec()
|
|
}
|
|
}
|