add functions to convert containers directly into packet
This commit is contained in:
parent
1e442012be
commit
baa450b2f7
10 changed files with 178 additions and 20 deletions
|
|
@ -1,5 +1,5 @@
|
|||
use crate::{heap_drop, heap_move, heap_move_nonnull, ByteSlice};
|
||||
use servicepoint::{CharGrid, Grid};
|
||||
use crate::{heap_drop, heap_move, heap_move_nonnull, heap_remove, ByteSlice};
|
||||
use servicepoint::{CharGrid, CharGridCommand, Grid, Origin, Packet};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
/// Creates a new [CharGrid] with the specified dimensions.
|
||||
|
|
@ -132,3 +132,24 @@ pub unsafe extern "C" fn sp_char_grid_height(
|
|||
) -> usize {
|
||||
unsafe { char_grid.as_ref().height() }
|
||||
}
|
||||
|
||||
/// Creates a [CharGridCommand] and immediately turns that into a [Packet].
|
||||
///
|
||||
/// The provided [CharGrid] gets consumed.
|
||||
///
|
||||
/// Returns NULL in case of an error.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn sp_char_grid_into_packet(
|
||||
grid: NonNull<CharGrid>,
|
||||
x: usize,
|
||||
y: usize,
|
||||
) -> *mut Packet {
|
||||
let grid = unsafe { heap_remove(grid) };
|
||||
match Packet::try_from(CharGridCommand {
|
||||
grid,
|
||||
origin: Origin::new(x, y),
|
||||
}) {
|
||||
Ok(packet) => heap_move(packet),
|
||||
Err(_) => std::ptr::null_mut(),
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue