Skip to content

Commit

Permalink
Auto-generated commit
Browse files Browse the repository at this point in the history
  • Loading branch information
stdlib-bot committed Aug 9, 2024
1 parent c0cbb69 commit e57b74f
Show file tree
Hide file tree
Showing 4 changed files with 170 additions and 1 deletion.
13 changes: 12 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

<section class="release" id="unreleased">

## Unreleased (2024-08-08)
## Unreleased (2024-08-09)

<section class="packages">

Expand Down Expand Up @@ -567,6 +567,16 @@ This release closes the following issue:

<details>

<section class="features">

##### 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)

</section>

<!-- /.features -->

<section class="bug-fixes">

##### Bug Fixes
Expand Down Expand Up @@ -5907,6 +5917,7 @@ A total of 30 people contributed to this release. Thank you to the following con

<details>

- [`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)_
Expand Down
63 changes: 63 additions & 0 deletions base/napi/unary/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <node_api.h>
#include <stdint.h>

// ...

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.
Expand Down Expand Up @@ -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 <stdint.h>

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.
</section>
<!-- /.usage -->
Expand Down
47 changes: 47 additions & 0 deletions base/napi/unary/include/stdlib/math/base/napi/unary.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 <stdint.h>
*
* 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.
*/
Expand Down Expand Up @@ -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
Expand Down
48 changes: 48 additions & 0 deletions base/napi/unary/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit e57b74f

Please sign in to comment.