From 99c1884ddcc1a40dfaa9d47c7ca964063acdd89e Mon Sep 17 00:00:00 2001 From: Vinzenz Schroeter Date: Sat, 12 Apr 2025 12:08:49 +0200 Subject: [PATCH] wip remove newtypes --- examples/lang_c/include/servicepoint.h | 46 +++++---------- src/command.rs | 8 +-- src/cp437_grid.rs | 78 ++++++++++++-------------- 3 files changed, 54 insertions(+), 78 deletions(-) diff --git a/examples/lang_c/include/servicepoint.h b/examples/lang_c/include/servicepoint.h index 1de6cc5..691fffe 100644 --- a/examples/lang_c/include/servicepoint.h +++ b/examples/lang_c/include/servicepoint.h @@ -245,22 +245,6 @@ typedef ValueGrid_char CharGrid; */ typedef ValueGrid_u8 Cp437Grid; -/** - * A C-wrapper for grid containing codepage 437 characters. - * - * The encoding is currently not enforced. - * - * # Examples - * - * ```C - * Cp437Grid grid = sp_cp437_grid_new(4, 3); - * sp_cp437_grid_fill(grid, '?'); - * sp_cp437_grid_set(grid, 0, 0, '!'); - * sp_cp437_grid_free(grid); - * ``` - */ -typedef Cp437Grid SPCp437Grid; - /** * A raw header. * @@ -1417,7 +1401,7 @@ Command *sp_command_clone(const Command *command); */ Command *sp_command_cp437_data(size_t x, size_t y, - SPCp437Grid *grid); + Cp437Grid *grid); /** * A yet-to-be-tested command. @@ -1631,7 +1615,7 @@ bool sp_connection_send_packet(const UdpConnection *connection, Packet *packet); * - the returned instance is freed in some way, either by using a consuming function or * by explicitly calling `sp_cp437_grid_free`. */ -SPCp437Grid *sp_cp437_grid_clone(const SPCp437Grid *cp437_grid); +Cp437Grid *sp_cp437_grid_clone(const Cp437Grid *cp437_grid); /** * Sets the value of all cells in the [SPCp437Grid]. @@ -1652,7 +1636,7 @@ SPCp437Grid *sp_cp437_grid_clone(const SPCp437Grid *cp437_grid); * - `cp437_grid` points to a valid [SPCp437Grid] * - `cp437_grid` is not written to or read from concurrently */ -void sp_cp437_grid_fill(SPCp437Grid *cp437_grid, uint8_t value); +void sp_cp437_grid_fill(Cp437Grid *cp437_grid, uint8_t value); /** * Deallocates a [SPCp437Grid]. @@ -1671,7 +1655,7 @@ void sp_cp437_grid_fill(SPCp437Grid *cp437_grid, uint8_t value); * * [SPCommand]: [crate::SPCommand] */ -void sp_cp437_grid_free(SPCp437Grid *cp437_grid); +void sp_cp437_grid_free(Cp437Grid *cp437_grid); /** * Gets the current value at the specified position. @@ -1693,7 +1677,7 @@ void sp_cp437_grid_free(SPCp437Grid *cp437_grid); * - `cp437_grid` points to a valid [SPCp437Grid] * - `cp437_grid` is not written to concurrently */ -uint8_t sp_cp437_grid_get(const SPCp437Grid *cp437_grid, size_t x, size_t y); +uint8_t sp_cp437_grid_get(const Cp437Grid *cp437_grid, size_t x, size_t y); /** * Gets the height of the [SPCp437Grid] instance. @@ -1712,7 +1696,7 @@ uint8_t sp_cp437_grid_get(const SPCp437Grid *cp437_grid, size_t x, size_t y); * * - `cp437_grid` points to a valid [SPCp437Grid] */ -size_t sp_cp437_grid_height(const SPCp437Grid *cp437_grid); +size_t sp_cp437_grid_height(const Cp437Grid *cp437_grid); /** * Loads a [SPCp437Grid] with the specified dimensions from the provided data. @@ -1733,10 +1717,10 @@ size_t sp_cp437_grid_height(const SPCp437Grid *cp437_grid); * - the returned instance is freed in some way, either by using a consuming function or * by explicitly calling `sp_cp437_grid_free`. */ -SPCp437Grid *sp_cp437_grid_load(size_t width, - size_t height, - const uint8_t *data, - size_t data_length); +Cp437Grid *sp_cp437_grid_load(size_t width, + size_t height, + const uint8_t *data, + size_t data_length); /** * Creates a new [SPCp437Grid] with the specified dimensions. @@ -1750,8 +1734,8 @@ SPCp437Grid *sp_cp437_grid_load(size_t width, * - the returned instance is freed in some way, either by using a consuming function or * by explicitly calling `sp_cp437_grid_free`. */ -SPCp437Grid *sp_cp437_grid_new(size_t width, - size_t height); +Cp437Grid *sp_cp437_grid_new(size_t width, + size_t height); /** * Sets the value of the specified position in the [SPCp437Grid]. @@ -1778,7 +1762,7 @@ SPCp437Grid *sp_cp437_grid_new(size_t width, * * [SPBitVec]: [crate::SPBitVec] */ -void sp_cp437_grid_set(SPCp437Grid *cp437_grid, +void sp_cp437_grid_set(Cp437Grid *cp437_grid, size_t x, size_t y, uint8_t value); @@ -1800,7 +1784,7 @@ void sp_cp437_grid_set(SPCp437Grid *cp437_grid, * - the returned memory range is never accessed after the passed [SPCp437Grid] has been freed * - the returned memory range is never accessed concurrently, either via the [SPCp437Grid] or directly */ -SPByteSlice sp_cp437_grid_unsafe_data_ref(SPCp437Grid *cp437_grid); +SPByteSlice sp_cp437_grid_unsafe_data_ref(Cp437Grid *cp437_grid); /** * Gets the width of the [SPCp437Grid] instance. @@ -1819,7 +1803,7 @@ SPByteSlice sp_cp437_grid_unsafe_data_ref(SPCp437Grid *cp437_grid); * * - `cp437_grid` points to a valid [SPCp437Grid] */ -size_t sp_cp437_grid_width(const SPCp437Grid *cp437_grid); +size_t sp_cp437_grid_width(const Cp437Grid *cp437_grid); /** * Clones a [SPPacket]. diff --git a/src/command.rs b/src/command.rs index 3e63eae..de8b5d6 100644 --- a/src/command.rs +++ b/src/command.rs @@ -2,8 +2,8 @@ //! //! prefix `sp_command_` -use crate::{SPBitVec, SPCompressionCode, SPCp437Grid}; -use servicepoint::{BinaryOperation, BrightnessGrid, CharGrid, GlobalBrightnessCommand, Packet, TypedCommand}; +use crate::{SPBitVec, SPCompressionCode}; +use servicepoint::{BinaryOperation, BrightnessGrid, CharGrid, Cp437Grid, GlobalBrightnessCommand, Packet, TypedCommand}; use std::ptr::NonNull; /// A low-level display command. @@ -405,14 +405,14 @@ unsafe fn sp_command_bitmap_linear_internal( pub unsafe extern "C" fn sp_command_cp437_data( x: usize, y: usize, - grid: *mut SPCp437Grid, + grid: *mut Cp437Grid, ) -> NonNull { assert!(!grid.is_null()); let grid = *unsafe { Box::from_raw(grid) }; let result = Box::new( servicepoint::Cp437GridCommand { origin: servicepoint::Origin::new(x, y), - grid: grid.0, + grid, } .into(), ); diff --git a/src/cp437_grid.rs b/src/cp437_grid.rs index eeb63eb..2ec009d 100644 --- a/src/cp437_grid.rs +++ b/src/cp437_grid.rs @@ -1,32 +1,25 @@ //! C functions for interacting with [SPCp437Grid]s //! //! prefix `sp_cp437_grid_` +//! +//! +//! A C-wrapper for grid containing codepage 437 characters. +//! +//! The encoding is currently not enforced. +//! +//! # Examples +//! +//! ```C +//! Cp437Grid grid = sp_cp437_grid_new(4, 3); +//! sp_cp437_grid_fill(grid, '?'); +//! sp_cp437_grid_set(grid, 0, 0, '!'); +//! sp_cp437_grid_free(grid); +//! ``` use crate::SPByteSlice; -use servicepoint::{DataRef, Grid}; +use servicepoint::{Cp437Grid, DataRef, Grid}; use std::ptr::NonNull; -/// A C-wrapper for grid containing codepage 437 characters. -/// -/// The encoding is currently not enforced. -/// -/// # Examples -/// -/// ```C -/// Cp437Grid grid = sp_cp437_grid_new(4, 3); -/// sp_cp437_grid_fill(grid, '?'); -/// sp_cp437_grid_set(grid, 0, 0, '!'); -/// sp_cp437_grid_free(grid); -/// ``` -#[repr(transparent)] -pub struct SPCp437Grid(pub(crate) servicepoint::Cp437Grid); - -impl Clone for SPCp437Grid { - fn clone(&self) -> Self { - SPCp437Grid(self.0.clone()) - } -} - /// Creates a new [SPCp437Grid] with the specified dimensions. /// /// returns: [SPCp437Grid] initialized to 0. Will never return NULL. @@ -41,9 +34,8 @@ impl Clone for SPCp437Grid { pub unsafe extern "C" fn sp_cp437_grid_new( width: usize, height: usize, -) -> NonNull { - let result = - Box::new(SPCp437Grid(servicepoint::Cp437Grid::new(width, height))); +) -> NonNull { + let result = Box::new(Cp437Grid::new(width, height)); NonNull::from(Box::leak(result)) } @@ -70,12 +62,12 @@ pub unsafe extern "C" fn sp_cp437_grid_load( height: usize, data: *const u8, data_length: usize, -) -> *mut SPCp437Grid { +) -> *mut Cp437Grid { assert!(data.is_null()); let data = unsafe { std::slice::from_raw_parts(data, data_length) }; - let grid = servicepoint::Cp437Grid::load(width, height, data); + let grid = Cp437Grid::load(width, height, data); if let Some(grid) = grid { - Box::leak(Box::new(SPCp437Grid(grid))) + Box::leak(Box::new(grid)) } else { std::ptr::null_mut() } @@ -99,8 +91,8 @@ pub unsafe extern "C" fn sp_cp437_grid_load( /// by explicitly calling `sp_cp437_grid_free`. #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_clone( - cp437_grid: *const SPCp437Grid, -) -> NonNull { + cp437_grid: *const Cp437Grid, +) -> NonNull { assert!(!cp437_grid.is_null()); let result = Box::new(unsafe { (*cp437_grid).clone() }); NonNull::from(Box::leak(result)) @@ -122,7 +114,7 @@ pub unsafe extern "C" fn sp_cp437_grid_clone( /// /// [SPCommand]: [crate::SPCommand] #[no_mangle] -pub unsafe extern "C" fn sp_cp437_grid_free(cp437_grid: *mut SPCp437Grid) { +pub unsafe extern "C" fn sp_cp437_grid_free(cp437_grid: *mut Cp437Grid) { assert!(!cp437_grid.is_null()); _ = unsafe { Box::from_raw(cp437_grid) }; } @@ -147,12 +139,12 @@ pub unsafe extern "C" fn sp_cp437_grid_free(cp437_grid: *mut SPCp437Grid) { /// - `cp437_grid` is not written to concurrently #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_get( - cp437_grid: *const SPCp437Grid, + cp437_grid: *const Cp437Grid, x: usize, y: usize, ) -> u8 { assert!(!cp437_grid.is_null()); - unsafe { (*cp437_grid).0.get(x, y) } + unsafe { (*cp437_grid).get(x, y) } } /// Sets the value of the specified position in the [SPCp437Grid]. @@ -180,13 +172,13 @@ pub unsafe extern "C" fn sp_cp437_grid_get( /// [SPBitVec]: [crate::SPBitVec] #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_set( - cp437_grid: *mut SPCp437Grid, + cp437_grid: *mut Cp437Grid, x: usize, y: usize, value: u8, ) { assert!(!cp437_grid.is_null()); - unsafe { (*cp437_grid).0.set(x, y, value) }; + unsafe { (*cp437_grid).set(x, y, value) }; } /// Sets the value of all cells in the [SPCp437Grid]. @@ -208,11 +200,11 @@ pub unsafe extern "C" fn sp_cp437_grid_set( /// - `cp437_grid` is not written to or read from concurrently #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_fill( - cp437_grid: *mut SPCp437Grid, + cp437_grid: *mut Cp437Grid, value: u8, ) { assert!(!cp437_grid.is_null()); - unsafe { (*cp437_grid).0.fill(value) }; + unsafe { (*cp437_grid).fill(value) }; } /// Gets the width of the [SPCp437Grid] instance. @@ -232,10 +224,10 @@ pub unsafe extern "C" fn sp_cp437_grid_fill( /// - `cp437_grid` points to a valid [SPCp437Grid] #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_width( - cp437_grid: *const SPCp437Grid, + cp437_grid: *const Cp437Grid, ) -> usize { assert!(!cp437_grid.is_null()); - unsafe { (*cp437_grid).0.width() } + unsafe { (*cp437_grid).width() } } /// Gets the height of the [SPCp437Grid] instance. @@ -255,10 +247,10 @@ pub unsafe extern "C" fn sp_cp437_grid_width( /// - `cp437_grid` points to a valid [SPCp437Grid] #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_height( - cp437_grid: *const SPCp437Grid, + cp437_grid: *const Cp437Grid, ) -> usize { assert!(!cp437_grid.is_null()); - unsafe { (*cp437_grid).0.height() } + unsafe { (*cp437_grid).height() } } /// Gets an unsafe reference to the data of the [SPCp437Grid] instance. @@ -278,7 +270,7 @@ pub unsafe extern "C" fn sp_cp437_grid_height( /// - the returned memory range is never accessed concurrently, either via the [SPCp437Grid] or directly #[no_mangle] pub unsafe extern "C" fn sp_cp437_grid_unsafe_data_ref( - cp437_grid: *mut SPCp437Grid, + cp437_grid: *mut Cp437Grid, ) -> SPByteSlice { - unsafe {SPByteSlice::from_slice((*cp437_grid).0.data_ref_mut()) } + unsafe {SPByteSlice::from_slice((*cp437_grid).data_ref_mut()) } }