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::internal_new(servicepoint::DisplayBitVec::repeat(false, size as usize)) } #[uniffi::constructor] pub fn load(data: Vec) -> Arc { 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 { self.actual.read().unwrap().clone().into_vec() } }