diff --git a/example/src/brightness_tester.c b/example/src/brightness_tester.c index 2257162..51790cf 100644 --- a/example/src/brightness_tester.c +++ b/example/src/brightness_tester.c @@ -12,7 +12,7 @@ void enable_all_pixels(void) { } void make_brightness_pattern(BrightnessGrid *grid) { - ByteSlice slice = sp_brightness_grid_data_ref_mut(grid); + ByteSlice slice = sp_brightness_grid_unsafe_data_ref(grid); for (size_t index = 0; index < slice.length; index++) { slice.start[index] = (uint8_t)(index % ((size_t) Brightness_MAX)); } diff --git a/include/servicepoint.h b/include/servicepoint.h index 02d0688..6d3b891 100644 --- a/include/servicepoint.h +++ b/include/servicepoint.h @@ -1166,9 +1166,9 @@ struct BitmapCommand */*notnull*/ sp_cmd_bitmap_from_bitmap(struct Bitmap */*not struct Bitmap */*notnull*/ sp_cmd_bitmap_get(struct BitmapCommand */*notnull*/ command); /** - *Gets the value of field `compression` of the [`servicepoint::BitmapCommand`]. + * Reads the compression kind of the [BitmapCommand]. */ -CompressionCode sp_cmd_bitmap_get_compression(struct BitmapCommand */*notnull*/ instance); +CompressionCode sp_cmd_bitmap_get_compression(struct BitmapCommand */*notnull*/ command); /** * Reads the origin field of the [BitmapCommand]. @@ -1196,10 +1196,10 @@ void sp_cmd_bitmap_set(struct BitmapCommand */*notnull*/ command, struct Bitmap */*notnull*/ bitmap); /** - *Sets the value of field `compression` of the [`servicepoint::BitmapCommand`]. + * Overwrites the compression kind of the [BitmapCommand]. */ -void sp_cmd_bitmap_set_compression(struct BitmapCommand */*notnull*/ instance, - CompressionCode value); +void sp_cmd_bitmap_set_compression(struct BitmapCommand */*notnull*/ command, + CompressionCode compression); /** * Overwrites the origin field of the [BitmapCommand]. @@ -1231,19 +1231,19 @@ void sp_cmd_bitvec_free(struct BitVecCommand */*notnull*/ instance); BitVec *sp_cmd_bitvec_get(struct BitVecCommand */*notnull*/ command); /** - *Gets the value of field `compression` of the [`servicepoint::BitVecCommand`]. + * Reads the compression kind of the [BitVecCommand]. */ -CompressionCode sp_cmd_bitvec_get_compression(struct BitVecCommand */*notnull*/ instance); +CompressionCode sp_cmd_bitvec_get_compression(struct BitVecCommand */*notnull*/ command); /** - *Gets the value of field `offset` of the [`servicepoint::BitVecCommand`]. + * Reads the offset field of the [BitVecCommand]. */ -Offset sp_cmd_bitvec_get_offset(struct BitVecCommand */*notnull*/ instance); +Offset sp_cmd_bitvec_get_offset(struct BitVecCommand */*notnull*/ command); /** - *Gets the value of field `operation` of the [`servicepoint::BitVecCommand`]. + * Returns the [BinaryOperation] of the command. */ -BinaryOperation sp_cmd_bitvec_get_operation(struct BitVecCommand */*notnull*/ instance); +BinaryOperation sp_cmd_bitvec_get_operation(struct BitVecCommand */*notnull*/ command); /** * Set pixel data starting at the pixel offset on screen. @@ -1271,22 +1271,22 @@ void sp_cmd_bitvec_set(struct BitVecCommand */*notnull*/ command, BitVec */*notnull*/ bitvec); /** - *Sets the value of field `compression` of the [`servicepoint::BitVecCommand`]. + * Overwrites the compression kind of the [BitVecCommand]. */ -void sp_cmd_bitvec_set_compression(struct BitVecCommand */*notnull*/ instance, - CompressionCode value); +void sp_cmd_bitvec_set_compression(struct BitVecCommand */*notnull*/ command, + CompressionCode compression); /** - *Sets the value of field `offset` of the [`servicepoint::BitVecCommand`]. + * Overwrites the offset field of the [BitVecCommand]. */ -void sp_cmd_bitvec_set_offset(struct BitVecCommand */*notnull*/ instance, - Offset value); +void sp_cmd_bitvec_set_offset(struct BitVecCommand */*notnull*/ command, + Offset offset); /** - *Sets the value of field `operation` of the [`servicepoint::BitVecCommand`]. + * Overwrites the [BinaryOperation] of the command. */ -void sp_cmd_bitvec_set_operation(struct BitVecCommand */*notnull*/ instance, - BinaryOperation value); +void sp_cmd_bitvec_set_operation(struct BitVecCommand */*notnull*/ command, + BinaryOperation operation); /** * Tries to turn a [BitVecCommand] into a [Packet]. @@ -1305,10 +1305,7 @@ struct GlobalBrightnessCommand */*notnull*/ sp_cmd_brightness_global_clone(struc */ void sp_cmd_brightness_global_free(struct GlobalBrightnessCommand */*notnull*/ instance); -/** - *Gets the value of field `brightness` of the [`servicepoint::GlobalBrightnessCommand`]. - */ -Brightness sp_cmd_brightness_global_get_brightness(struct GlobalBrightnessCommand */*notnull*/ instance); +Brightness sp_cmd_brightness_global_get(struct GlobalBrightnessCommand */*notnull*/ command); struct Packet */*notnull*/ sp_cmd_brightness_global_into_packet(struct GlobalBrightnessCommand */*notnull*/ command); @@ -1320,10 +1317,10 @@ struct Packet */*notnull*/ sp_cmd_brightness_global_into_packet(struct GlobalBri struct GlobalBrightnessCommand */*notnull*/ sp_cmd_brightness_global_new(Brightness brightness); /** - *Sets the value of field `brightness` of the [`servicepoint::GlobalBrightnessCommand`]. + * Moves the provided bitmap to be contained in the command. */ -void sp_cmd_brightness_global_set_brightness(struct GlobalBrightnessCommand */*notnull*/ instance, - Brightness value); +void sp_cmd_brightness_global_set(struct GlobalBrightnessCommand */*notnull*/ command, + Brightness brightness); /** *Clones a [BrightnessGridCommand] instance. @@ -1591,11 +1588,6 @@ void sp_cmd_hard_reset_free(struct HardResetCommand */*notnull*/ instance); */ struct HardResetCommand */*notnull*/ sp_cmd_hard_reset_new(void); -/** - *Clones a [Cp437Grid] instance. - */ -Cp437Grid */*notnull*/ sp_cp437_grid_clone(Cp437Grid */*notnull*/ instance); - /** * Calls [`servicepoint::Cp437Grid::data_ref_mut`]. * @@ -1603,7 +1595,7 @@ Cp437Grid */*notnull*/ sp_cp437_grid_clone(Cp437Grid */*notnull*/ instance); * * The returned memory is valid for the lifetime of the instance. */ -struct ByteSlice sp_cp437_grid_data_ref_mut(Cp437Grid */*notnull*/ instance); +struct ByteSlice sp_cp437_data_ref_mut(Cp437Grid */*notnull*/ instance); /** * Calls [`servicepoint::Cp437Grid::fill`]. @@ -1615,12 +1607,7 @@ struct ByteSlice sp_cp437_grid_data_ref_mut(Cp437Grid */*notnull*/ instance); * - `cp437_grid`: instance to write to * - `value`: the value to set all cells to */ -void sp_cp437_grid_fill(Cp437Grid */*notnull*/ instance, uint8_t value); - -/** - *Deallocates a [Cp437Grid] instance. - */ -void sp_cp437_grid_free(Cp437Grid */*notnull*/ instance); +void sp_cp437_fill(Cp437Grid */*notnull*/ instance, uint8_t value); /** * Calls [`servicepoint::Cp437Grid::get`]. @@ -1635,14 +1622,17 @@ void sp_cp437_grid_free(Cp437Grid */*notnull*/ instance); * * - when accessing `x` or `y` out of bounds */ -uint8_t sp_cp437_grid_get(Cp437Grid */*notnull*/ instance, size_t x, size_t y); +uint8_t sp_cp437_get(Cp437Grid */*notnull*/ instance, size_t x, size_t y); /** - * Calls [`servicepoint::Cp437Grid::height`]. - * - * Gets the height of the grid. + *Clones a [Cp437Grid] instance. */ -size_t sp_cp437_grid_height(Cp437Grid */*notnull*/ instance); +Cp437Grid */*notnull*/ sp_cp437_grid_clone(Cp437Grid */*notnull*/ instance); + +/** + *Deallocates a [Cp437Grid] instance. + */ +void sp_cp437_grid_free(Cp437Grid */*notnull*/ instance); /** * Creates a [Cp437GridCommand] and immediately turns that into a [Packet]. @@ -1669,6 +1659,13 @@ Cp437Grid *sp_cp437_grid_load(size_t width, */ Cp437Grid */*notnull*/ sp_cp437_grid_new(size_t width, size_t height); +/** + * Calls [`servicepoint::Cp437Grid::height`]. + * + * Gets the height of the grid. + */ +size_t sp_cp437_height(Cp437Grid */*notnull*/ instance); + /** * Calls [`servicepoint::Cp437Grid::set`]. * @@ -1685,17 +1682,17 @@ Cp437Grid */*notnull*/ sp_cp437_grid_new(size_t width, size_t height); * * - when accessing `x` or `y` out of bounds */ -void sp_cp437_grid_set(Cp437Grid */*notnull*/ instance, - size_t x, - size_t y, - uint8_t value); +void sp_cp437_set(Cp437Grid */*notnull*/ instance, + size_t x, + size_t y, + uint8_t value); /** * Calls [`servicepoint::Cp437Grid::width`]. * * Gets the width of the grid. */ -size_t sp_cp437_grid_width(Cp437Grid */*notnull*/ instance); +size_t sp_cp437_width(Cp437Grid */*notnull*/ instance); /** *Clones a [Packet] instance. @@ -1715,17 +1712,12 @@ void sp_packet_free(struct Packet */*notnull*/ instance); struct Packet */*notnull*/ sp_packet_from_parts(struct Header header, struct ByteSlice payload); -/** - *Gets the value of field `header` of the [`servicepoint::Packet`]. - */ -struct Header sp_packet_get_header(struct Packet */*notnull*/ instance); - /** * Returns a pointer to the header field of the provided packet. * * The returned header can be changed and will be valid for the lifetime of the packet. */ -struct Header */*notnull*/ sp_packet_get_header_mut(struct Packet */*notnull*/ packet); +struct Header */*notnull*/ sp_packet_get_header(struct Packet */*notnull*/ packet); /** * Returns a pointer to the current payload of the provided packet. @@ -1746,12 +1738,6 @@ struct ByteSlice sp_packet_get_payload(struct Packet */*notnull*/ packet); void sp_packet_serialize_to(struct Packet */*notnull*/ packet, struct ByteSlice buffer); -/** - *Sets the value of field `header` of the [`servicepoint::Packet`]. - */ -void sp_packet_set_header(struct Packet */*notnull*/ instance, - struct Header value); - /** * Sets the payload of the provided packet to the provided data. * diff --git a/src/commands/bitmap_command.rs b/src/commands/bitmap_command.rs index 3bfcf20..6018b33 100644 --- a/src/commands/bitmap_command.rs +++ b/src/commands/bitmap_command.rs @@ -1,5 +1,5 @@ use crate::{ - macros::{wrap_clone, wrap_fields, wrap_free}, + macros::{wrap_clone, wrap_free}, mem::{heap_move_nonnull, heap_move_ok, heap_remove}, }; use servicepoint::{Bitmap, BitmapCommand, CompressionCode, Origin, Packet}; @@ -45,24 +45,8 @@ pub unsafe extern "C" fn sp_cmd_bitmap_try_into_packet( heap_move_ok(unsafe { heap_remove(command) }.try_into()) } -wrap_clone!(sp_cmd_bitmap::BitmapCommand); -wrap_free!(sp_cmd_bitmap::BitmapCommand); - -wrap_fields!( - sp_cmd_bitmap::BitmapCommand; - //prop bitmap: NonNull { - // get() { - // return NonNull::from(bitmap); - // }; - // set(value) { - // return unsafe { heap_remove(value) }; - // }; - //}; - prop compression: CompressionCode { - get(); - set(value); - }; -); +wrap_clone!(BitmapCommand, sp_cmd_bitmap); +wrap_free!(BitmapCommand, sp_cmd_bitmap); /// Returns a pointer to the provided `BitmapCommand`. /// @@ -113,3 +97,22 @@ pub unsafe extern "C" fn sp_cmd_bitmap_set_origin( command.as_mut().origin = Origin::new(origin_x, origin_y); } } + +/// Overwrites the compression kind of the [BitmapCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitmap_set_compression( + mut command: NonNull, + compression: CompressionCode, +) { + unsafe { + command.as_mut().compression = compression; + } +} + +/// Reads the compression kind of the [BitmapCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitmap_get_compression( + command: NonNull, +) -> CompressionCode { + unsafe { command.as_ref().compression } +} diff --git a/src/commands/bitvec_command.rs b/src/commands/bitvec_command.rs index 7ccbf31..b3eb843 100644 --- a/src/commands/bitvec_command.rs +++ b/src/commands/bitvec_command.rs @@ -1,5 +1,5 @@ use crate::{ - macros::{wrap_clone, wrap_fields, wrap_free}, + macros::{wrap_clone, wrap_free}, mem::{heap_move_nonnull, heap_move_ok, heap_remove}, }; use servicepoint::{ @@ -45,24 +45,8 @@ pub unsafe extern "C" fn sp_cmd_bitvec_try_into_packet( heap_move_ok(unsafe { heap_remove(command) }.try_into()) } -wrap_clone!(sp_cmd_bitvec::BitVecCommand); -wrap_free!(sp_cmd_bitvec::BitVecCommand); - -wrap_fields!( - sp_cmd_bitvec::BitVecCommand; - prop offset: Offset { - get(); - set(value); - }; - prop operation: BinaryOperation { - get(); - set(value); - }; - prop compression: CompressionCode { - get(); - set(value); - }; -); +wrap_clone!(BitVecCommand, sp_cmd_bitvec); +wrap_free!(BitVecCommand, sp_cmd_bitvec); /// Returns a pointer to the [BitVec] contained in the [BitVecCommand]. #[no_mangle] @@ -82,3 +66,60 @@ pub unsafe extern "C" fn sp_cmd_bitvec_set( command.as_mut().bitvec = heap_remove(bitvec); } } + +/// Reads the offset field of the [BitVecCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_get_offset( + command: NonNull, +) -> Offset { + unsafe { command.as_ref().offset } +} + +/// Overwrites the offset field of the [BitVecCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_set_offset( + mut command: NonNull, + offset: Offset, +) { + unsafe { + command.as_mut().offset = offset; + } +} + +/// Returns the [BinaryOperation] of the command. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_get_operation( + command: NonNull, +) -> BinaryOperation { + unsafe { command.as_ref().operation } +} + +/// Overwrites the [BinaryOperation] of the command. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_set_operation( + mut command: NonNull, + operation: BinaryOperation, +) { + unsafe { + command.as_mut().operation = operation; + } +} + +/// Overwrites the compression kind of the [BitVecCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_set_compression( + mut command: NonNull, + compression: CompressionCode, +) { + unsafe { + command.as_mut().compression = compression; + } +} + +/// Reads the compression kind of the [BitVecCommand]. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_bitvec_get_compression( + command: NonNull, +) -> CompressionCode { + unsafe { command.as_ref().compression } +} diff --git a/src/commands/brightness_grid_command.rs b/src/commands/brightness_grid_command.rs index 9c5069e..7803486 100644 --- a/src/commands/brightness_grid_command.rs +++ b/src/commands/brightness_grid_command.rs @@ -41,8 +41,8 @@ pub unsafe extern "C" fn sp_cmd_brightness_grid_into_packet( heap_move_ok(unsafe { heap_remove(command) }.try_into()) } -wrap_clone!(sp_cmd_brightness_grid::BrightnessGridCommand); -wrap_free!(sp_cmd_brightness_grid::BrightnessGridCommand); +wrap_clone!(BrightnessGridCommand, sp_cmd_brightness_grid); +wrap_free!(BrightnessGridCommand, sp_cmd_brightness_grid); /// Moves the provided [BrightnessGrid] to be contained in the [BrightnessGridCommand]. #[no_mangle] diff --git a/src/commands/cc_only_commands.rs b/src/commands/cc_only_commands.rs index fc73303..0acfa68 100644 --- a/src/commands/cc_only_commands.rs +++ b/src/commands/cc_only_commands.rs @@ -12,7 +12,7 @@ pub unsafe extern "C" fn sp_cmd_clear_new() -> NonNull { heap_move_nonnull(ClearCommand) } -wrap_free!(sp_cmd_clear::ClearCommand); +wrap_free!(ClearCommand, sp_cmd_clear); /// Kills the udp daemon on the display, which usually results in a restart. /// @@ -24,7 +24,7 @@ pub unsafe extern "C" fn sp_cmd_hard_reset_new() -> NonNull { heap_move_nonnull(HardResetCommand) } -wrap_free!(sp_cmd_hard_reset::HardResetCommand); +wrap_free!(HardResetCommand, sp_cmd_hard_reset); /// A yet-to-be-tested command. /// @@ -34,4 +34,4 @@ pub unsafe extern "C" fn sp_cmd_fade_out_new() -> NonNull { heap_move_nonnull(FadeOutCommand) } -wrap_free!(sp_cmd_fade_out::FadeOutCommand); +wrap_free!(FadeOutCommand, sp_cmd_fade_out); diff --git a/src/commands/char_grid_command.rs b/src/commands/char_grid_command.rs index b895718..8a6c07c 100644 --- a/src/commands/char_grid_command.rs +++ b/src/commands/char_grid_command.rs @@ -41,8 +41,8 @@ pub unsafe extern "C" fn sp_cmd_char_grid_try_into_packet( heap_move_ok(unsafe { heap_remove(command) }.try_into()) } -wrap_clone!(sp_cmd_char_grid::CharGridCommand); -wrap_free!(sp_cmd_char_grid::CharGridCommand); +wrap_clone!(CharGridCommand, sp_cmd_char_grid); +wrap_free!(CharGridCommand, sp_cmd_char_grid); /// Moves the provided [CharGrid] to be contained in the [CharGridCommand]. #[no_mangle] diff --git a/src/commands/cp437_grid_command.rs b/src/commands/cp437_grid_command.rs index 3f1fa9f..fc32f05 100644 --- a/src/commands/cp437_grid_command.rs +++ b/src/commands/cp437_grid_command.rs @@ -41,8 +41,8 @@ pub unsafe extern "C" fn sp_cmd_cp437_grid_try_into_packet( heap_move_ok(unsafe { heap_remove(command) }.try_into()) } -wrap_clone!(sp_cmd_cp437_grid::Cp437GridCommand); -wrap_free!(sp_cmd_cp437_grid::Cp437GridCommand); +wrap_clone!(Cp437GridCommand, sp_cmd_cp437_grid); +wrap_free!(Cp437GridCommand, sp_cmd_cp437_grid); /// Moves the provided bitmap into the provided command. /// diff --git a/src/commands/global_brightness_command.rs b/src/commands/global_brightness_command.rs index e695ef0..48d21d7 100644 --- a/src/commands/global_brightness_command.rs +++ b/src/commands/global_brightness_command.rs @@ -1,5 +1,5 @@ use crate::{ - macros::{wrap_clone, wrap_fields, wrap_free}, + macros::{wrap_clone, wrap_free}, mem::{heap_move_nonnull, heap_remove}, }; use servicepoint::{Brightness, GlobalBrightnessCommand, Packet}; @@ -22,13 +22,23 @@ pub unsafe extern "C" fn sp_cmd_brightness_global_into_packet( heap_move_nonnull(unsafe { heap_remove(command) }.into()) } -wrap_clone!(sp_cmd_brightness_global::GlobalBrightnessCommand); -wrap_free!(sp_cmd_brightness_global::GlobalBrightnessCommand); +wrap_clone!(GlobalBrightnessCommand, sp_cmd_brightness_global); +wrap_free!(GlobalBrightnessCommand, sp_cmd_brightness_global); -wrap_fields!( - sp_cmd_brightness_global::GlobalBrightnessCommand; - prop brightness: Brightness { - get(); - set(value); - }; -); +/// Moves the provided bitmap to be contained in the command. +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_brightness_global_set( + mut command: NonNull, + brightness: Brightness, +) { + unsafe { + command.as_mut().brightness = brightness; + } +} + +#[no_mangle] +pub unsafe extern "C" fn sp_cmd_brightness_global_get( + mut command: NonNull, +) -> Brightness { + unsafe { command.as_mut().brightness } +} diff --git a/src/containers/bitmap.rs b/src/containers/bitmap.rs index 9b96d10..ae97597 100644 --- a/src/containers/bitmap.rs +++ b/src/containers/bitmap.rs @@ -80,11 +80,11 @@ pub unsafe extern "C" fn sp_bitmap_from_bitvec( heap_move_ok(Bitmap::from_bitvec(width, bitvec)) } -wrap_clone!(sp_bitmap::Bitmap); -wrap_free!(sp_bitmap::Bitmap); +wrap_clone!(Bitmap, sp_bitmap); +wrap_free!(Bitmap, sp_bitmap); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Gets the current value at the specified position. /// /// # Arguments @@ -98,7 +98,7 @@ wrap_method!( ); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Sets the value of the specified position. /// /// # Arguments @@ -113,7 +113,7 @@ wrap_method!( ); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Sets the state of all pixels in the [Bitmap]. /// /// # Arguments @@ -123,19 +123,19 @@ wrap_method!( ); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Gets the width in pixels. ref fn width() -> usize; ); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Gets the height in pixels. ref fn height() -> usize; ); wrap_method!( - sp_bitmap::Bitmap; + sp_bitmap :: Bitmap; /// Gets an unsafe reference to the data of the [Bitmap] instance. /// /// The returned memory is valid for the lifetime of the bitmap. diff --git a/src/containers/bitvec.rs b/src/containers/bitvec.rs index aad2a88..ea0ca4b 100644 --- a/src/containers/bitvec.rs +++ b/src/containers/bitvec.rs @@ -35,11 +35,11 @@ pub unsafe extern "C" fn sp_bitvec_load( heap_move_nonnull(DisplayBitVec::from_slice(data)) } -wrap_clone!(sp_bitvec::DisplayBitVec); -wrap_free!(sp_bitvec::DisplayBitVec); +wrap_clone!(DisplayBitVec, sp_bitvec); +wrap_free!(DisplayBitVec, sp_bitvec); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Gets the value of a bit. /// /// # Arguments @@ -57,7 +57,7 @@ wrap_method!( ); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Sets the value of a bit. /// /// # Arguments @@ -72,7 +72,7 @@ wrap_method!( ); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Sets the value of all bits. /// /// # Arguments @@ -82,19 +82,19 @@ wrap_method!( ); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Gets the length in bits. ref fn len() -> usize; ); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Returns true if length is 0. ref fn is_empty() -> bool; ); wrap_method!( - sp_bitvec::DisplayBitVec; + sp_bitvec :: DisplayBitVec; /// Gets an unsafe reference to the data of the [DisplayBitVec] instance. /// /// The returned memory is valid for the lifetime of the bitvec. diff --git a/src/containers/brightness_grid.rs b/src/containers/brightness_grid.rs index 54491c2..a1a5e4e 100644 --- a/src/containers/brightness_grid.rs +++ b/src/containers/brightness_grid.rs @@ -52,11 +52,11 @@ pub unsafe extern "C" fn sp_brightness_grid_load( ) } -wrap_clone!(sp_brightness_grid::BrightnessGrid); -wrap_free!(sp_brightness_grid::BrightnessGrid); +wrap_clone!(BrightnessGrid, sp_brightness_grid); +wrap_free!(BrightnessGrid, sp_brightness_grid); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Gets the current value at the specified position. /// /// # Arguments @@ -71,7 +71,7 @@ wrap_method!( ); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Sets the value of the specified position. /// /// # Arguments @@ -88,7 +88,7 @@ wrap_method!( ); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Sets the value of all cells. /// /// # Arguments @@ -98,19 +98,19 @@ wrap_method!( ); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Gets the width of the grid. ref fn width() -> usize; ); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Gets the height of the grid. ref fn height() -> usize; ); wrap_method!( - sp_brightness_grid::BrightnessGrid; + sp_brightness_grid :: BrightnessGrid; /// Gets an unsafe reference to the data of the instance. /// /// The returned memory is valid for the lifetime of the grid. diff --git a/src/containers/char_grid.rs b/src/containers/char_grid.rs index 5db7897..bc421b5 100644 --- a/src/containers/char_grid.rs +++ b/src/containers/char_grid.rs @@ -39,11 +39,11 @@ pub unsafe extern "C" fn sp_char_grid_load( heap_move_ok(CharGrid::load_utf8(width, height, data.to_vec())) } -wrap_clone!(sp_char_grid::CharGrid); -wrap_free!(sp_char_grid::CharGrid); +wrap_clone!(CharGrid, sp_char_grid); +wrap_free!(CharGrid, sp_char_grid); wrap_method!( - sp_char_grid::CharGrid; + sp_char_grid :: CharGrid; /// Returns the current value at the specified position. /// /// # Arguments @@ -58,7 +58,7 @@ wrap_method!( ); wrap_method!( - sp_char_grid::CharGrid; + sp_char_grid :: CharGrid; /// Sets the value of the specified position in the grid. /// /// # Arguments @@ -77,7 +77,7 @@ wrap_method!( ); wrap_method!( - sp_char_grid::CharGrid; + sp_char_grid :: CharGrid; /// Sets the value of all cells in the grid. /// /// # Arguments @@ -89,13 +89,13 @@ wrap_method!( ); wrap_method!( - sp_char_grid::CharGrid; + sp_char_grid :: CharGrid; /// Gets the width of the grid. ref fn width() -> usize; ); wrap_method!( - sp_char_grid::CharGrid; + sp_char_grid :: CharGrid; /// Gets the height of the grid. ref fn height() -> usize; ); diff --git a/src/containers/cp437_grid.rs b/src/containers/cp437_grid.rs index 5d7b84f..88fb2b0 100644 --- a/src/containers/cp437_grid.rs +++ b/src/containers/cp437_grid.rs @@ -30,11 +30,11 @@ pub unsafe extern "C" fn sp_cp437_grid_load( heap_move_some(Cp437Grid::load(width, height, data)) } -wrap_clone!(sp_cp437_grid::Cp437Grid); -wrap_free!(sp_cp437_grid::Cp437Grid); +wrap_clone!(Cp437Grid, sp_cp437_grid); +wrap_free!(Cp437Grid, sp_cp437_grid); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Gets the current value at the specified position. /// /// # Arguments @@ -48,7 +48,7 @@ wrap_method!( ); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Sets the value at the specified position. /// /// # Arguments @@ -65,7 +65,7 @@ wrap_method!( ); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Sets the value of all cells in the grid. /// /// # Arguments @@ -76,19 +76,19 @@ wrap_method!( ); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Gets the width of the grid. ref fn width() -> usize; ); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Gets the height of the grid. ref fn height() -> usize; ); wrap_method!( - sp_cp437_grid::Cp437Grid; + sp_cp437 :: Cp437Grid; /// Gets an unsafe reference to the data of the grid. /// /// The returned memory is valid for the lifetime of the instance. diff --git a/src/macros.rs b/src/macros.rs index df21e23..c91248e 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -1,5 +1,5 @@ macro_rules! wrap_free { - ($prefix:ident :: $typ:ty) => { + ($typ:ty, $prefix:ident) => { paste::paste! { #[doc = concat!("Deallocates a [", stringify!($typ), "] instance.")] #[no_mangle] @@ -11,7 +11,7 @@ macro_rules! wrap_free { } macro_rules! wrap_clone { - ($prefix:ident :: $typ:ty) => { + ($typ:ty, $prefix:ident) => { paste::paste! { #[doc = concat!("Clones a [", stringify!($typ), "] instance.")] #[no_mangle] @@ -54,7 +54,7 @@ macro_rules! wrap_method { instance: NonNull<$object_type>, $($param_name: $param_type),* ) $(-> $return_type)? { - let instance = unsafe { $crate::macros:: [< nonnull_as_ $ref_or_mut >] !(instance) }; + let instance = unsafe {$crate::macros:: [< nonnull_as_ $ref_or_mut >] !(instance)}; $(let $param_let_name = $param_let_expr;)* #[allow( unused_variables, @@ -62,85 +62,16 @@ macro_rules! wrap_method { let result = instance.$function($($param_name),*); $( $( - let $it = result; - let result = $return_expr; + let $it = result; + let result = $return_expr; )? - return result; + return result; )? } } }; } -macro_rules! wrap_fields { - ( - $prefix:ident :: $object_type:ty; - $( - prop $prop_name:ident : $prop_type:ty { - $( - get() $({ - $(#[$get_meta:meta])* - $(return $get_expr:expr;)? - })?; - )? - $( - set($value:ident) - $({ - $(#[$set_meta:meta])* - $(return $set_expr:expr;)? - })?; - )? - }; - )+ - ) => { - paste::paste! { - $( - $( - #[doc = concat!("Gets the value of field `", stringify!($prop_name), - "` of the [`servicepoint::",stringify!($object_type),"`].")] - $($( - #[doc = ""] - #[$get_meta] - )*)? - #[no_mangle] - pub unsafe extern "C" fn [<$prefix _ get _ $prop_name>]( - instance: NonNull<$object_type> - ) -> $prop_type { - let instance = unsafe { $crate::macros::nonnull_as_ref!(instance) }; - let $prop_name = instance.$prop_name; - $($( - let $prop_name = $get_expr; - )?)? - return $prop_name; - } - )? - - $( - #[doc = concat!("Sets the value of field `", stringify!($prop_name), - "` of the [`servicepoint::",stringify!($object_type),"`].")] - $($( - #[doc = ""] - #[$set_meta] - )*)? - #[no_mangle] - pub unsafe extern "C" fn [<$prefix _ set _ $prop_name>]( - instance: NonNull<$object_type>, - value: $prop_type, - ) { - let instance = unsafe { $crate::macros::nonnull_as_mut!(instance) }; - $($( - let $value = value; - let value = $set_expr; - )?)? - instance.$prop_name = value; - } - )? - )+ - } - }; -} - pub(crate) use { - nonnull_as_mut, nonnull_as_ref, wrap_clone, wrap_fields, wrap_free, - wrap_method, + nonnull_as_mut, nonnull_as_ref, wrap_clone, wrap_free, wrap_method, }; diff --git a/src/packet.rs b/src/packet.rs index af49fc8..658265c 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -1,6 +1,6 @@ use crate::{ containers::ByteSlice, - macros::{wrap_clone, wrap_fields, wrap_free}, + macros::{wrap_clone, wrap_free}, mem::{heap_move_nonnull, heap_move_ok}, }; use servicepoint::{CommandCode, Header, Packet}; @@ -36,7 +36,7 @@ pub unsafe extern "C" fn sp_packet_from_parts( /// /// The returned header can be changed and will be valid for the lifetime of the packet. #[no_mangle] -pub unsafe extern "C" fn sp_packet_get_header_mut( +pub unsafe extern "C" fn sp_packet_get_header( packet: NonNull, ) -> NonNull
{ NonNull::from(unsafe { &mut (*packet.as_ptr()).header }) @@ -91,16 +91,8 @@ pub unsafe extern "C" fn sp_packet_serialize_to( } } -wrap_clone!(sp_packet::Packet); -wrap_free!(sp_packet::Packet); - -wrap_fields!( - sp_packet::Packet; - prop header: Header { - get(); - set(value); - }; -); +wrap_clone!(Packet, sp_packet); +wrap_free!(Packet, sp_packet); /// Converts u16 into [CommandCode]. /// diff --git a/src/udp.rs b/src/udp.rs index e18476a..eef82a8 100644 --- a/src/udp.rs +++ b/src/udp.rs @@ -144,4 +144,4 @@ pub unsafe extern "C" fn sp_udp_send_header( .is_ok() } -wrap_free!(sp_udp::UdpSocket); +wrap_free!(UdpSocket, sp_udp);