use crate::{
boxed::BitBox,
order::BitOrder,
pointer::BitPtr,
slice::BitSlice,
store::BitStore,
};
use core::{
marker::{
PhantomData,
Unpin,
},
mem,
pin::Pin,
};
impl<O, T> BitBox<O, T>
where O: BitOrder, T: BitStore {
pub fn new(bits: &BitSlice<O, T>) -> Self {
Self::from_bitslice(bits)
}
pub fn pin(bits: &BitSlice<O, T>) -> Pin<Self>
where O: Unpin, T: Unpin {
Pin::new(Self::new(bits))
}
pub unsafe fn from_raw(raw: *mut BitSlice<O, T>) -> Self {
Self {
_order: PhantomData,
pointer: BitPtr::from_mut_ptr(raw),
}
}
pub fn into_raw(b: Self) -> *mut BitSlice<O, T> {
let out = b.pointer.as_mut_ptr();
mem::forget(b);
out
}
pub fn leak<'a>(self) -> &'a mut BitSlice<O, T> {
let out = self.bitptr();
mem::forget(self);
out.into_bitslice_mut()
}
}