From e57b74f77d17c30e12c0a9344d335e6b1d44875c Mon Sep 17 00:00:00 2001 From: stdlib-bot Date: Fri, 9 Aug 2024 20:57:05 +0000 Subject: [PATCH] Auto-generated commit --- CHANGELOG.md | 13 +++- base/napi/unary/README.md | 63 +++++++++++++++++++ .../include/stdlib/math/base/napi/unary.h | 47 ++++++++++++++ base/napi/unary/src/main.c | 48 ++++++++++++++ 4 files changed, 170 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43ad2929a..9a7d3d5f7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@
-## Unreleased (2024-08-08) +## Unreleased (2024-08-09)
@@ -567,6 +567,16 @@ This release closes the following issue:
+
+ +##### Features + +- [`b224509`](https://github.com/stdlib-js/stdlib/commit/b2245099fc615230ea5a6d3dd28dc7626634bdab) - add `F_I` macro to `math/base/napi/unary` [(#2768)](https://github.com/stdlib-js/stdlib/pull/2768) + +
+ + +
##### Bug Fixes @@ -5907,6 +5917,7 @@ A total of 30 people contributed to this release. Thank you to the following con
+- [`b224509`](https://github.com/stdlib-js/stdlib/commit/b2245099fc615230ea5a6d3dd28dc7626634bdab) - **feat:** add `F_I` macro to `math/base/napi/unary` [(#2768)](https://github.com/stdlib-js/stdlib/pull/2768) _(by Gunj Joshi)_ - [`140b517`](https://github.com/stdlib-js/stdlib/commit/140b5172075f08678b84b5f92b7feeacfc777119) - **feat:** add `math/base/assert/is-integerf` _(by Gunj Joshi, Philipp Burckhardt)_ - [`2837436`](https://github.com/stdlib-js/stdlib/commit/283743652091fff85f01746b9edf8da3d5286cf5) - **docs:** update license header in `math/base/special/gamma1pm1` [(#2764)](https://github.com/stdlib-js/stdlib/pull/2764) _(by Gunj Joshi)_ - [`c14e9c3`](https://github.com/stdlib-js/stdlib/commit/c14e9c3c5b43e13f53e20f87b51868e49b8b7882) - **docs:** update license header and remove `stdlib` include in `math/base/special/trigamma` _(by Gunj Joshi)_ diff --git a/base/napi/unary/README.md b/base/napi/unary/README.md index eed3a55c4..2b8370a8c 100644 --- a/base/napi/unary/README.md +++ b/base/napi/unary/README.md @@ -422,6 +422,46 @@ The function accepts the following arguments: void stdlib_math_base_napi_i_i( napi_env env, napi_callback_info info, double (*fcn)( int32_t ) ); ``` +#### stdlib_math_base_napi_f_i( env, info, fcn ) + +Invokes a unary function accepting a single-precision floating-point number and returning a signed 32-bit integer. + +```c +#include +#include + +// ... + +static int32_t fcn( const float x ) { + // ... +} + +// ... + +/** +* Receives JavaScript callback invocation data. +* +* @param env environment under which the function is invoked +* @param info callback data +* @return Node-API value +*/ +napi_value addon( napi_env env, napi_callback_info info ) { + return stdlib_math_base_napi_f_i( env, info, fcn ); +} + +// ... +``` + +The function accepts the following arguments: + +- **env**: `[in] napi_env` environment under which the function is invoked. +- **info**: `[in] napi_callback_info` callback data. +- **fcn**: `[in] int32_t (*fcn)( float )` unary function. + +```c +void stdlib_math_base_napi_f_i( napi_env env, napi_callback_info info, int32_t (*fcn)( float ) ); +``` + #### STDLIB_MATH_BASE_NAPI_MODULE_D_D( fcn ) Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning double-precision floating-point numbers. @@ -620,6 +660,29 @@ The macro expects the following arguments: When used, this macro should be used **instead of** `NAPI_MODULE`. The macro includes `NAPI_MODULE`, thus ensuring Node-API module registration. +#### STDLIB_MATH_BASE_NAPI_MODULE_F_I( fcn ) + +Macro for registering a Node-API module exporting an interface for invoking a unary function accepting a single-precision floating-point number and returning a signed 32-bit integer. + +```c +#include + +static int32_t fcn( const float x ) { + // ... +} + +// ... + +// Register a Node-API module: +STDLIB_MATH_BASE_NAPI_MODULE_F_I( fcn ); +``` + +The macro expects the following arguments: + +- **fcn**: `int32_t (*fcn)( float )` unary function. + +When used, this macro should be used **instead of** `NAPI_MODULE`. The macro includes `NAPI_MODULE`, thus ensuring Node-API module registration. +
diff --git a/base/napi/unary/include/stdlib/math/base/napi/unary.h b/base/napi/unary/include/stdlib/math/base/napi/unary.h index bb0fe32f9..6fccc422e 100644 --- a/base/napi/unary/include/stdlib/math/base/napi/unary.h +++ b/base/napi/unary/include/stdlib/math/base/napi/unary.h @@ -375,6 +375,48 @@ }; \ NAPI_MODULE( NODE_GYP_MODULE_NAME, stdlib_math_base_napi_i_d_init ) +/** +* Macro for registering a Node-API module exporting an interface invoking a unary function accepting a single-precision floating-point number and returning a signed 32-bit integer. +* +* @param fcn unary function +* +* @example +* #include +* +* static int32_t fcn( const float x ) { +* // ... +* } +* +* // ... +* +* // Register a Node-API module: +* STDLIB_MATH_BASE_NAPI_MODULE_F_I( fcn ); +*/ +#define STDLIB_MATH_BASE_NAPI_MODULE_F_I( fcn ) \ + static napi_value stdlib_math_base_napi_f_i_wrapper( \ + napi_env env, \ + napi_callback_info info \ + ) { \ + return stdlib_math_base_napi_f_i( env, info, fcn ); \ + }; \ + static napi_value stdlib_math_base_napi_f_i_init( \ + napi_env env, \ + napi_value exports \ + ) { \ + napi_value fcn; \ + napi_status status = napi_create_function( \ + env, \ + "exports", \ + NAPI_AUTO_LENGTH, \ + stdlib_math_base_napi_f_i_wrapper, \ + NULL, \ + &fcn \ + ); \ + assert( status == napi_ok ); \ + return fcn; \ + }; \ + NAPI_MODULE( NODE_GYP_MODULE_NAME, stdlib_math_base_napi_f_i_init ) + /* * If C++, prevent name mangling so that the compiler emits a binary file having undecorated names, thus mirroring the behavior of a C compiler. */ @@ -422,6 +464,11 @@ napi_value stdlib_math_base_napi_i_i( napi_env env, napi_callback_info info, int */ napi_value stdlib_math_base_napi_i_d( napi_env env, napi_callback_info info, double (*fcn)( int32_t ) ); +/** +* Invokes a unary function accepting a single-precision floating-point number and returning a signed 32-bit integer. +*/ +napi_value stdlib_math_base_napi_f_i( napi_env env, napi_callback_info info, int32_t (*fcn)( float ) ); + #ifdef __cplusplus } #endif diff --git a/base/napi/unary/src/main.c b/base/napi/unary/src/main.c index 42473db80..7e448ad4a 100644 --- a/base/napi/unary/src/main.c +++ b/base/napi/unary/src/main.c @@ -599,3 +599,51 @@ napi_value stdlib_math_base_napi_i_d( napi_env env, napi_callback_info info, dou return v; } + +/** +* Invokes a unary function accepting a single-precision floating-point number and returning a signed 32-bit integer. +* +* ## Notes +* +* - This function expects that the callback `info` argument provides access to the following JavaScript arguments: +* +* - `x`: input value. +* +* @param env environment under which the function is invoked +* @param info callback data +* @param fcn unary function +* @return function return value as a Node-API signed 32-bit integer +*/ +napi_value stdlib_math_base_napi_f_i( napi_env env, napi_callback_info info, int32_t (*fcn)( float ) ) { + napi_status status; + + size_t argc = 1; + napi_value argv[ 1 ]; + status = napi_get_cb_info( env, info, &argc, argv, NULL, NULL ); + assert( status == napi_ok ); + + if ( argc < 1 ) { + status = napi_throw_error( env, NULL, "invalid invocation. Must provide a number." ); + assert( status == napi_ok ); + return NULL; + } + + napi_valuetype vtype0; + status = napi_typeof( env, argv[ 0 ], &vtype0 ); + assert( status == napi_ok ); + if ( vtype0 != napi_number ) { + status = napi_throw_type_error( env, NULL, "invalid argument. Must provide a number." ); + assert( status == napi_ok ); + return NULL; + } + + double x; + status = napi_get_value_double( env, argv[ 0 ], &x ); + assert( status == napi_ok ); + + napi_value v; + status = napi_create_int32( env, (int32_t)fcn( (float)x ), &v ); + assert( status == napi_ok ); + + return v; +}