restructure api
This commit is contained in:
parent
efaa52faa1
commit
8320ee2d80
32 changed files with 561 additions and 544 deletions
|
@ -2,8 +2,8 @@
|
|||
//!
|
||||
//! prefix `sp_bitmap_`
|
||||
|
||||
use std::ptr::NonNull;
|
||||
use servicepoint::{DataRef, Grid};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
use crate::byte_slice::SPByteSlice;
|
||||
|
||||
|
@ -43,9 +43,7 @@ pub unsafe extern "C" fn sp_bitmap_new(
|
|||
width: usize,
|
||||
height: usize,
|
||||
) -> NonNull<SPBitmap> {
|
||||
let result = Box::new(SPBitmap(servicepoint::Bitmap::new(
|
||||
width, height,
|
||||
)));
|
||||
let result = Box::new(SPBitmap(servicepoint::Bitmap::new(width, height)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -96,9 +94,8 @@ pub unsafe extern "C" fn sp_bitmap_load(
|
|||
) -> NonNull<SPBitmap> {
|
||||
assert!(!data.is_null());
|
||||
let data = std::slice::from_raw_parts(data, data_length);
|
||||
let result = Box::new(SPBitmap(servicepoint::Bitmap::load(
|
||||
width, height, data,
|
||||
)));
|
||||
let result =
|
||||
Box::new(SPBitmap(servicepoint::Bitmap::load(width, height, data)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,8 @@
|
|||
//!
|
||||
//! prefix `sp_bitvec_`
|
||||
|
||||
use std::ptr::NonNull;
|
||||
use crate::SPByteSlice;
|
||||
use servicepoint::bitvec::prelude::{BitVec, Msb0};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
/// A vector of bits
|
||||
///
|
||||
|
@ -14,15 +13,15 @@ use servicepoint::bitvec::prelude::{BitVec, Msb0};
|
|||
/// sp_bitvec_set(vec, 5, true);
|
||||
/// sp_bitvec_free(vec);
|
||||
/// ```
|
||||
pub struct SPBitVec(BitVec<u8, Msb0>);
|
||||
pub struct SPBitVec(servicepoint::BitVec);
|
||||
|
||||
impl From<BitVec<u8, Msb0>> for SPBitVec {
|
||||
fn from(actual: BitVec<u8, Msb0>) -> Self {
|
||||
impl From<servicepoint::BitVec> for SPBitVec {
|
||||
fn from(actual: servicepoint::BitVec) -> Self {
|
||||
Self(actual)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<SPBitVec> for BitVec<u8, Msb0> {
|
||||
impl From<SPBitVec> for servicepoint::BitVec {
|
||||
fn from(value: SPBitVec) -> Self {
|
||||
value.0
|
||||
}
|
||||
|
@ -54,7 +53,7 @@ impl Clone for SPBitVec {
|
|||
/// by explicitly calling `sp_bitvec_free`.
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn sp_bitvec_new(size: usize) -> NonNull<SPBitVec> {
|
||||
let result = Box::new(SPBitVec(BitVec::repeat(false, size)));
|
||||
let result = Box::new(SPBitVec(servicepoint::BitVec::repeat(false, size)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -81,7 +80,7 @@ pub unsafe extern "C" fn sp_bitvec_load(
|
|||
) -> NonNull<SPBitVec> {
|
||||
assert!(!data.is_null());
|
||||
let data = std::slice::from_raw_parts(data, data_length);
|
||||
let result = Box::new(SPBitVec(BitVec::from_slice(data)));
|
||||
let result = Box::new(SPBitVec(servicepoint::BitVec::from_slice(data)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
//! prefix `sp_brightness_grid_`
|
||||
|
||||
use crate::SPByteSlice;
|
||||
use servicepoint::{Brightness, ByteGrid, DataRef, Grid};
|
||||
use servicepoint::{DataRef, Grid};
|
||||
use std::convert::Into;
|
||||
use std::intrinsics::transmute;
|
||||
use std::ptr::NonNull;
|
||||
|
@ -48,9 +48,9 @@ pub unsafe extern "C" fn sp_brightness_grid_new(
|
|||
width: usize,
|
||||
height: usize,
|
||||
) -> NonNull<SPBrightnessGrid> {
|
||||
let result = Box::new(SPBrightnessGrid(
|
||||
servicepoint::BrightnessGrid::new(width, height),
|
||||
));
|
||||
let result = Box::new(SPBrightnessGrid(servicepoint::BrightnessGrid::new(
|
||||
width, height,
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -80,7 +80,7 @@ pub unsafe extern "C" fn sp_brightness_grid_load(
|
|||
) -> NonNull<SPBrightnessGrid> {
|
||||
assert!(!data.is_null());
|
||||
let data = std::slice::from_raw_parts(data, data_length);
|
||||
let grid = ByteGrid::load(width, height, data);
|
||||
let grid = servicepoint::ByteGrid::load(width, height, data);
|
||||
let grid = servicepoint::BrightnessGrid::try_from(grid)
|
||||
.expect("invalid brightness value");
|
||||
let result = Box::new(SPBrightnessGrid(grid));
|
||||
|
@ -203,8 +203,8 @@ pub unsafe extern "C" fn sp_brightness_grid_set(
|
|||
value: u8,
|
||||
) {
|
||||
assert!(!brightness_grid.is_null());
|
||||
let brightness =
|
||||
Brightness::try_from(value).expect("invalid brightness value");
|
||||
let brightness = servicepoint::Brightness::try_from(value)
|
||||
.expect("invalid brightness value");
|
||||
(*brightness_grid).0.set(x, y, brightness);
|
||||
}
|
||||
|
||||
|
@ -232,8 +232,8 @@ pub unsafe extern "C" fn sp_brightness_grid_fill(
|
|||
value: u8,
|
||||
) {
|
||||
assert!(!brightness_grid.is_null());
|
||||
let brightness =
|
||||
Brightness::try_from(value).expect("invalid brightness value");
|
||||
let brightness = servicepoint::Brightness::try_from(value)
|
||||
.expect("invalid brightness value");
|
||||
(*brightness_grid).0.fill(brightness);
|
||||
}
|
||||
|
||||
|
@ -311,7 +311,7 @@ pub unsafe extern "C" fn sp_brightness_grid_unsafe_data_ref(
|
|||
brightness_grid: *mut SPBrightnessGrid,
|
||||
) -> SPByteSlice {
|
||||
assert!(!brightness_grid.is_null());
|
||||
assert_eq!(core::mem::size_of::<Brightness>(), 1);
|
||||
assert_eq!(core::mem::size_of::<servicepoint::Brightness>(), 1);
|
||||
let data = (*brightness_grid).0.data_ref_mut();
|
||||
// this assumes more about the memory layout than rust guarantees. yikes!
|
||||
let data: &mut [u8] = transmute(data);
|
||||
|
|
|
@ -4,8 +4,6 @@
|
|||
|
||||
use std::ptr::{null_mut, NonNull};
|
||||
|
||||
use servicepoint::{Brightness, Origin};
|
||||
|
||||
use crate::{
|
||||
SPBitVec, SPBitmap, SPBrightnessGrid, SPCompressionCode, SPCp437Grid,
|
||||
SPPacket,
|
||||
|
@ -164,11 +162,10 @@ pub unsafe extern "C" fn sp_command_fade_out() -> NonNull<SPCommand> {
|
|||
pub unsafe extern "C" fn sp_command_brightness(
|
||||
brightness: u8,
|
||||
) -> NonNull<SPCommand> {
|
||||
let brightness =
|
||||
Brightness::try_from(brightness).expect("invalid brightness");
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::Brightness(brightness),
|
||||
));
|
||||
let brightness = servicepoint::Brightness::try_from(brightness)
|
||||
.expect("invalid brightness");
|
||||
let result =
|
||||
Box::new(SPCommand(servicepoint::Command::Brightness(brightness)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -198,9 +195,10 @@ pub unsafe extern "C" fn sp_command_char_brightness(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!grid.is_null());
|
||||
let byte_grid = *Box::from_raw(grid);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::CharBrightness(Origin::new(x, y), byte_grid.0),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::CharBrightness(
|
||||
servicepoint::Origin::new(x, y),
|
||||
byte_grid.0,
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -237,13 +235,11 @@ pub unsafe extern "C" fn sp_command_bitmap_linear(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!bit_vec.is_null());
|
||||
let bit_vec = *Box::from_raw(bit_vec);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::BitmapLinear(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::BitmapLinear(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -280,13 +276,11 @@ pub unsafe extern "C" fn sp_command_bitmap_linear_and(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!bit_vec.is_null());
|
||||
let bit_vec = *Box::from_raw(bit_vec);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::BitmapLinearAnd(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::BitmapLinearAnd(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -323,13 +317,11 @@ pub unsafe extern "C" fn sp_command_bitmap_linear_or(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!bit_vec.is_null());
|
||||
let bit_vec = *Box::from_raw(bit_vec);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::BitmapLinearOr(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::BitmapLinearOr(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -366,13 +358,11 @@ pub unsafe extern "C" fn sp_command_bitmap_linear_xor(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!bit_vec.is_null());
|
||||
let bit_vec = *Box::from_raw(bit_vec);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::BitmapLinearXor(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::BitmapLinearXor(
|
||||
offset,
|
||||
bit_vec.into(),
|
||||
compression.try_into().expect("invalid compression code"),
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -402,9 +392,10 @@ pub unsafe extern "C" fn sp_command_cp437_data(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!grid.is_null());
|
||||
let grid = *Box::from_raw(grid);
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::Cp437Data(Origin::new(x, y), grid.0),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::Cp437Data(
|
||||
servicepoint::Origin::new(x, y),
|
||||
grid.0,
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -437,15 +428,13 @@ pub unsafe extern "C" fn sp_command_bitmap_linear_win(
|
|||
) -> NonNull<SPCommand> {
|
||||
assert!(!bitmap.is_null());
|
||||
let byte_grid = (*Box::from_raw(bitmap)).0;
|
||||
let result = Box::new(SPCommand(
|
||||
servicepoint::Command::BitmapLinearWin(
|
||||
Origin::new(x, y),
|
||||
byte_grid,
|
||||
compression_code
|
||||
.try_into()
|
||||
.expect("invalid compression code"),
|
||||
),
|
||||
));
|
||||
let result = Box::new(SPCommand(servicepoint::Command::BitmapLinearWin(
|
||||
servicepoint::Origin::new(x, y),
|
||||
byte_grid,
|
||||
compression_code
|
||||
.try_into()
|
||||
.expect("invalid compression code"),
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
//!
|
||||
//! prefix `sp_cp437_grid_`
|
||||
|
||||
use std::ptr::NonNull;
|
||||
use crate::SPByteSlice;
|
||||
use servicepoint::{DataRef, Grid};
|
||||
use std::ptr::NonNull;
|
||||
|
||||
/// A C-wrapper for grid containing codepage 437 characters.
|
||||
///
|
||||
|
@ -41,9 +41,8 @@ pub unsafe extern "C" fn sp_cp437_grid_new(
|
|||
width: usize,
|
||||
height: usize,
|
||||
) -> NonNull<SPCp437Grid> {
|
||||
let result = Box::new(SPCp437Grid(
|
||||
servicepoint::Cp437Grid::new(width, height),
|
||||
));
|
||||
let result =
|
||||
Box::new(SPCp437Grid(servicepoint::Cp437Grid::new(width, height)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
@ -73,9 +72,9 @@ pub unsafe extern "C" fn sp_cp437_grid_load(
|
|||
) -> NonNull<SPCp437Grid> {
|
||||
assert!(data.is_null());
|
||||
let data = std::slice::from_raw_parts(data, data_length);
|
||||
let result = Box::new(SPCp437Grid(
|
||||
servicepoint::Cp437Grid::load(width, height, data),
|
||||
));
|
||||
let result = Box::new(SPCp437Grid(servicepoint::Cp437Grid::load(
|
||||
width, height, data,
|
||||
)));
|
||||
NonNull::from(Box::leak(result))
|
||||
}
|
||||
|
||||
|
|
|
@ -25,8 +25,8 @@
|
|||
//! }
|
||||
//! ```
|
||||
|
||||
pub use crate::bitvec::*;
|
||||
pub use crate::bitmap::*;
|
||||
pub use crate::bitvec::*;
|
||||
pub use crate::brightness_grid::*;
|
||||
pub use crate::byte_slice::*;
|
||||
pub use crate::command::*;
|
||||
|
@ -35,8 +35,8 @@ pub use crate::constants::*;
|
|||
pub use crate::cp437_grid::*;
|
||||
pub use crate::packet::*;
|
||||
|
||||
mod bitvec;
|
||||
mod bitmap;
|
||||
mod bitvec;
|
||||
mod brightness_grid;
|
||||
mod byte_slice;
|
||||
mod command;
|
||||
|
|
|
@ -7,7 +7,7 @@ use std::ptr::{null_mut, NonNull};
|
|||
use crate::SPCommand;
|
||||
|
||||
/// The raw packet
|
||||
pub struct SPPacket(pub(crate) servicepoint::packet::Packet);
|
||||
pub struct SPPacket(pub(crate) servicepoint::Packet);
|
||||
|
||||
/// Turns a [SPCommand] into a [SPPacket].
|
||||
/// The [SPCommand] gets consumed.
|
||||
|
@ -59,7 +59,7 @@ pub unsafe extern "C" fn sp_packet_try_load(
|
|||
) -> *mut SPPacket {
|
||||
assert!(!data.is_null());
|
||||
let data = std::slice::from_raw_parts(data, length);
|
||||
match servicepoint::packet::Packet::try_from(data) {
|
||||
match servicepoint::Packet::try_from(data) {
|
||||
Err(_) => null_mut(),
|
||||
Ok(packet) => Box::into_raw(Box::new(SPPacket(packet))),
|
||||
}
|
||||
|
@ -108,8 +108,8 @@ pub unsafe extern "C" fn sp_packet_from_parts(
|
|||
Vec::from(payload)
|
||||
};
|
||||
|
||||
let packet = servicepoint::packet::Packet {
|
||||
header: servicepoint::packet::Header {
|
||||
let packet = servicepoint::Packet {
|
||||
header: servicepoint::Header {
|
||||
command_code,
|
||||
a,
|
||||
b,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue