Compare commits
	
		
			3 commits
		
	
	
		
			f483b5a2d5
			...
			a418e4f0c3
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
							 | 
						a418e4f0c3 | ||
| 
							 | 
						2e468fb47a | ||
| 
							 | 
						c797bb6894 | 
					 4 changed files with 51 additions and 10 deletions
				
			
		| 
						 | 
					@ -24,7 +24,7 @@ sort_by = "Name"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[parse]
 | 
					[parse]
 | 
				
			||||||
parse_deps = true
 | 
					parse_deps = true
 | 
				
			||||||
include = ["servicepoint"]
 | 
					include = ["servicepoint", "std"]
 | 
				
			||||||
extra_bindings = ["servicepoint"]
 | 
					extra_bindings = ["servicepoint"]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[parse.expand]
 | 
					[parse.expand]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -388,6 +388,15 @@ void sp_bitmap_fill(Bitmap */*notnull*/ bitmap, bool value);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
void sp_bitmap_free(Bitmap */*notnull*/ bitmap);
 | 
					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].
 | 
					 * Gets the current value at the specified position in the [Bitmap].
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					@ -411,6 +420,11 @@ bool sp_bitmap_get(Bitmap */*notnull*/ bitmap, size_t x, size_t y);
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
size_t sp_bitmap_height(Bitmap */*notnull*/ bitmap);
 | 
					size_t sp_bitmap_height(Bitmap */*notnull*/ bitmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Consumes the Bitmap and returns the contained BitVec
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					SPBitVec */*notnull*/ sp_bitmap_into_bitvec(Bitmap */*notnull*/ bitmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Loads a [Bitmap] with the specified dimensions from the provided data.
 | 
					 * Loads a [Bitmap] with the specified dimensions from the provided data.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
use crate::byte_slice::ByteSlice;
 | 
					use crate::byte_slice::ByteSlice;
 | 
				
			||||||
use crate::{heap_drop, heap_move, heap_move_nonnull};
 | 
					use crate::{heap_drop, heap_move, heap_move_nonnull, SPBitVec};
 | 
				
			||||||
use servicepoint::{Bitmap, DataRef, Grid};
 | 
					use servicepoint::{Bitmap, DataRef, Grid};
 | 
				
			||||||
use std::ptr::NonNull;
 | 
					use std::ptr::NonNull;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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].
 | 
					/// Clones a [Bitmap].
 | 
				
			||||||
#[no_mangle]
 | 
					#[no_mangle]
 | 
				
			||||||
pub unsafe extern "C" fn sp_bitmap_clone(
 | 
					pub unsafe extern "C" fn sp_bitmap_clone(
 | 
				
			||||||
| 
						 | 
					@ -172,3 +190,12 @@ pub unsafe extern "C" fn sp_bitmap_unsafe_data_ref(
 | 
				
			||||||
) -> ByteSlice {
 | 
					) -> ByteSlice {
 | 
				
			||||||
    unsafe { ByteSlice::from_slice(bitmap.as_mut().data_ref_mut()) }
 | 
					    unsafe { ByteSlice::from_slice(bitmap.as_mut().data_ref_mut()) }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Consumes the Bitmap and returns the contained BitVec
 | 
				
			||||||
 | 
					#[no_mangle]
 | 
				
			||||||
 | 
					pub unsafe extern "C" fn sp_bitmap_into_bitvec(
 | 
				
			||||||
 | 
					    bitmap: NonNull<Bitmap>,
 | 
				
			||||||
 | 
					) -> NonNull<SPBitVec> {
 | 
				
			||||||
 | 
					    let bitmap = unsafe { *Box::from_raw(bitmap.as_ptr()) };
 | 
				
			||||||
 | 
					    heap_move_nonnull(SPBitVec(bitmap.into()))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,6 +30,8 @@ pub unsafe extern "C" fn sp_brightness_grid_new(
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Loads a [BrightnessGrid] with the specified dimensions from the provided data.
 | 
					/// Loads a [BrightnessGrid] with the specified dimensions from the provided data.
 | 
				
			||||||
///
 | 
					///
 | 
				
			||||||
 | 
					/// Any out of range values will be set to [Brightness::MAX] or [Brightness::MIN].
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
/// returns: new [BrightnessGrid] instance, or NULL in case of an error.
 | 
					/// returns: new [BrightnessGrid] instance, or NULL in case of an error.
 | 
				
			||||||
#[no_mangle]
 | 
					#[no_mangle]
 | 
				
			||||||
pub unsafe extern "C" fn sp_brightness_grid_load(
 | 
					pub unsafe extern "C" fn sp_brightness_grid_load(
 | 
				
			||||||
| 
						 | 
					@ -38,14 +40,12 @@ pub unsafe extern "C" fn sp_brightness_grid_load(
 | 
				
			||||||
    data: ByteSlice,
 | 
					    data: ByteSlice,
 | 
				
			||||||
) -> *mut BrightnessGrid {
 | 
					) -> *mut BrightnessGrid {
 | 
				
			||||||
    let data = unsafe { data.as_slice() };
 | 
					    let data = unsafe { data.as_slice() };
 | 
				
			||||||
    let grid = match ByteGrid::load(width, height, data) {
 | 
					
 | 
				
			||||||
        None => return std::ptr::null_mut(),
 | 
					    match ByteGrid::load(width, height, data)
 | 
				
			||||||
        Some(grid) => grid,
 | 
					        .map(move |grid| grid.map(Brightness::saturating_from))
 | 
				
			||||||
    };
 | 
					    {
 | 
				
			||||||
    if let Ok(grid) = BrightnessGrid::try_from(grid) {
 | 
					        None => std::ptr::null_mut(),
 | 
				
			||||||
        heap_move(grid)
 | 
					        Some(grid) => heap_move(grid),
 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        std::ptr::null_mut()
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue