use core::mem;
use tap::Tap;
use super::BitBox;
use crate::{
order::BitOrder,
ptr::BitSpan,
slice::BitSlice,
store::BitStore,
vec::BitVec,
};
impl<T, O> BitBox<T, O>
where
T: BitStore,
O: BitOrder,
{
#[inline]
pub unsafe fn from_raw(raw: *mut BitSlice<T, O>) -> Self {
Self {
bitspan: BitSpan::from_bitslice_ptr_mut(raw),
}
}
#[inline]
pub fn into_raw(this: Self) -> *mut BitSlice<T, O> {
Self::leak(this)
}
#[inline]
pub fn leak<'a>(this: Self) -> &'a mut BitSlice<T, O>
where T: 'a {
unsafe { this.bitspan.into_bitslice_mut() }.tap(|_| mem::forget(this))
}
#[inline]
#[doc(hidden)]
#[cfg(not(tarpaulin_include))]
#[deprecated = "use `.into_bitvec()` instead"]
pub fn into_vec(self) -> BitVec<T, O> {
self.into_bitvec()
}
}