add sp_bitmap_from_bitvec

This commit is contained in:
Vinzenz Schroeter 2025-04-12 18:41:43 +02:00
parent c797bb6894
commit 2e468fb47a
2 changed files with 27 additions and 0 deletions

View file

@ -388,6 +388,15 @@ void sp_bitmap_fill(Bitmap */*notnull*/ bitmap, bool value);
*/
void sp_bitmap_free(Bitmap */*notnull*/ bitmap);
/**
* Tries to convert the BitVec to a Bitmap.
*
* The provided BitVec gets consumed.
*
* Returns NULL in case of error.
*/
Bitmap *sp_bitmap_from_bitvec(size_t width, SPBitVec */*notnull*/ bitvec);
/**
* Gets the current value at the specified position in the [Bitmap].
*

View file

@ -68,6 +68,24 @@ pub unsafe extern "C" fn sp_bitmap_load(
}
}
/// Tries to convert the BitVec to a Bitmap.
///
/// The provided BitVec gets consumed.
///
/// Returns NULL in case of error.
#[no_mangle]
pub unsafe extern "C" fn sp_bitmap_from_bitvec(
width: usize,
bitvec: NonNull<SPBitVec>,
) -> *mut Bitmap {
let bitvec = unsafe { *Box::from_raw(bitvec.as_ptr()) };
if let Ok(bitmap) = Bitmap::from_bitvec(width, bitvec.0) {
heap_move(bitmap)
} else {
std::ptr::null_mut()
}
}
/// Clones a [Bitmap].
#[no_mangle]
pub unsafe extern "C" fn sp_bitmap_clone(