From 68b151e090a919ad6d08c4547ff85b0dc33c9fa9 Mon Sep 17 00:00:00 2001 From: Neerajpathak07 Date: Fri, 4 Apr 2025 00:01:38 +0530 Subject: [PATCH 1/5] feat: adding essential files --- .../@stdlib/math/base/napi/ternary/README.md | 63 ++++++++++++ .../include/stdlib/math/base/napi/ternary.h | 1 + .../stdlib/math/base/napi/ternary/fif_f.h | 84 ++++++++++++++++ .../math/base/napi/ternary/manifest.json | 1 + .../math/base/napi/ternary/src/fif_f.c | 98 +++++++++++++++++++ 5 files changed, 247 insertions(+) create mode 100644 lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h create mode 100644 lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md index 94a06e5afa4c..ab54e180d92c 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md @@ -449,6 +449,69 @@ The function accepts the following arguments: void stdlib_math_base_napi_fff_f( napi_env env, napi_callback_info info, float (*fcn)( float, float, float ) ); ``` +#### STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ) + +Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, afloat-precision floating-point number and returning a float-precision floating-point number. + +```c +#include + +static float fcn( const float x, const int32_t y, const float z ) { + // ... +} + +// ... + +// Register a Node-API module: +STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ); +``` + +The macro expects the following arguments: + +- **fcn**: `float (*fcn)( float, int32_t, float )` ternary function. + +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_fif_f( env, info, fcn ) + +Invokes a ternary function accepting a float-precision floating-point number, a signed 32-bit integer, and a float-precision floating-point number and returning a float-precision floating-point number. + +```c +#include +#include + +// ... + +static float fcn( const float x, const int32_t y, const float z ) { + // ... +} + +// ... + +/** +* 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_fif_f( 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] float (*fcn)( float, int32_t, float )` ternary function. + +```c +void stdlib_math_base_napi_fif_f( napi_env env, napi_callback_info info, float (*fcn)( float, int32_t, float ) ); +``` + #### STDLIB_MATH_BASE_NAPI_MODULE_IID_D( fcn ) Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting two signed 32-bit integers and a double-precision floating-point number and returning a double-precision floating-point number. diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary.h b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary.h index a077b8238776..7c73068eda2c 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary.h +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary.h @@ -25,6 +25,7 @@ #include "stdlib/math/base/napi/ternary/did_d.h" #include "stdlib/math/base/napi/ternary/dii_d.h" #include "stdlib/math/base/napi/ternary/fff_f.h" +#include "stdlib/math/base/napi/ternary/fif_f.h" #include "stdlib/math/base/napi/ternary/iid_d.h" #include "stdlib/math/base/napi/ternary/iii_d.h" #include "stdlib/math/base/napi/ternary/zzz_z.h" diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h new file mode 100644 index 000000000000..cdee0ad3bbf5 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h @@ -0,0 +1,84 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#ifndef STDLIB_MATH_BASE_NAPI_TERNARY_FIF_F_H +#define STDLIB_MATH_BASE_NAPI_TERNARY_FIF_F_H + +#include +#include +#include + +/** +* Macro for registering a Node-API module exporting an interface invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. +* +* @param fcn ternary function +* +* @example +* #include +* +* static float fcn( const float x, const int32_t y, const float z ) { +* // ... +* } +* +* // ... +* +* // Register a Node-API module: +* STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ); +*/ +#define STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ) \ + static napi_value stdlib_math_base_napi_fif_f_wrapper( \ + napi_env env, \ + napi_callback_info info \ + ) { \ + return stdlib_math_base_napi_fif_f( env, info, fcn ); \ + }; \ + static napi_value stdlib_math_base_napi_fif_f_init( \ + napi_env env, \ + napi_value exports \ + ) { \ + napi_value f; \ + napi_status status = napi_create_function( \ + env, \ + "exports", \ + NAPI_AUTO_LENGTH, \ + stdlib_math_base_napi_did_d_wrapper, \ + NULL, \ + &f \ + ); \ + assert( status == napi_ok ); \ + return f; \ + }; \ + NAPI_MODULE( NODE_GYP_MODULE_NAME, stdlib_math_base_napi_fif_f_init ) + +/* +* If C++, prevent name mangling so that the compiler emits a ternary file having undecorated names, thus mirroring the behavior of a C compiler. +*/ +#ifdef __cplusplus +extern "C" { +#endif + +/** +* Invokes a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. +*/ +napi_value stdlib_math_base_napi_fif_f( napi_env env, napi_callback_info info, float (*fcn)( float, int32_t, float ) ); + +#ifdef __cplusplus +} +#endif + +#endif // !STDLIB_MATH_BASE_NAPI_TERNARY_FIF_F_H diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/manifest.json b/lib/node_modules/@stdlib/math/base/napi/ternary/manifest.json index 234f29f223c3..675b6538fd72 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/manifest.json +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/manifest.json @@ -30,6 +30,7 @@ "./src/did_d.c", "./src/dii_d.c", "./src/fff_f.c", + "./src/fif_f.c", "./src/iid_d.c", "./src/iii_d.c", "./src/zzz_z.c" diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c new file mode 100644 index 000000000000..2e690ad10c02 --- /dev/null +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c @@ -0,0 +1,98 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2025 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +#include "stdlib/math/base/napi/ternary/fif_f.h" +#include +#include +#include + +/** +* Invokes a ternary function accepting single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. +* +* ## Notes +* +* - This function expects that the callback `info` argument provides access to the following JavaScript arguments: +* +* - `x`: input value. +* - `y`: input value. +* - `z`: input value. +* +* @param env environment under which the function is invoked +* @param info callback data +* @param fcn ternary function +* @return function return value as a Node-API double-precision floating-point number +*/ +napi_value stdlib_math_base_napi_fif_f( napi_env env, napi_callback_info info, float (*fcn)( float, int32_t, float ) ) { + napi_status status; + + size_t argc = 3; + napi_value argv[ 3 ]; + status = napi_get_cb_info( env, info, &argc, argv, NULL, NULL ); + assert( status == napi_ok ); + + if ( argc < 3 ) { + status = napi_throw_error( env, NULL, "invalid invocation. Must provide three numbers." ); + 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. First argument must be a number." ); + assert( status == napi_ok ); + return NULL; + } + + napi_valuetype vtype1; + status = napi_typeof( env, argv[ 1 ], &vtype1 ); + assert( status == napi_ok ); + if ( vtype1 != napi_number ) { + status = napi_throw_type_error( env, NULL, "invalid argument. Second argument must be a number." ); + assert( status == napi_ok ); + return NULL; + } + + napi_valuetype vtype2; + status = napi_typeof( env, argv[ 2 ], &vtype2 ); + assert( status == napi_ok ); + if ( vtype2 != napi_number ) { + status = napi_throw_type_error( env, NULL, "invalid argument. Third argument must be a number." ); + assert( status == napi_ok ); + return NULL; + } + + double x; + status = napi_get_value_double( env, argv[ 0 ], &x ); + assert( status == napi_ok ); + + int32_t y; + status = napi_get_value_int32( env, argv[ 1 ], &y ); + assert( status == napi_ok ); + + double z; + status = napi_get_value_double( env, argv[ 2 ], &z ); + assert( status == napi_ok ); + + napi_value v; + status = napi_create_double( env, (double)fcn( (float)x, (int32_t)y, (float)z ), &v ); + assert( status == napi_ok ); + + return v; +} From 86d0358005d68861e1f3b87105f03ddcd90bc51c Mon Sep 17 00:00:00 2001 From: Neerajpathak07 Date: Fri, 4 Apr 2025 00:07:33 +0530 Subject: [PATCH 2/5] chore: cleaning markdown --- lib/node_modules/@stdlib/math/base/napi/ternary/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md index ab54e180d92c..19d6ec7a9830 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md @@ -451,7 +451,7 @@ void stdlib_math_base_napi_fff_f( napi_env env, napi_callback_info info, float ( #### STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ) -Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, afloat-precision floating-point number and returning a float-precision floating-point number. +Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, a single-precision floating-point number and returning a single-precision floating-point number. ```c #include @@ -474,7 +474,7 @@ When used, this macro should be used **instead of** `NAPI_MODULE`. The macro inc #### stdlib_math_base_napi_fif_f( env, info, fcn ) -Invokes a ternary function accepting a float-precision floating-point number, a signed 32-bit integer, and a float-precision floating-point number and returning a float-precision floating-point number. +Invokes a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. ```c #include From 83bd30fdb53bbbeb7746f052121891bf75e5af73 Mon Sep 17 00:00:00 2001 From: Karan Anand Date: Thu, 3 Apr 2025 19:08:07 -0700 Subject: [PATCH 3/5] chore: apply suggestions from review --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: passed - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: na - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h | 2 +- lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h index cdee0ad3bbf5..06dcbd471818 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/include/stdlib/math/base/napi/ternary/fif_f.h @@ -56,7 +56,7 @@ env, \ "exports", \ NAPI_AUTO_LENGTH, \ - stdlib_math_base_napi_did_d_wrapper, \ + stdlib_math_base_napi_fif_f_wrapper, \ NULL, \ &f \ ); \ diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c index 2e690ad10c02..123ce00e4ef5 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c @@ -22,7 +22,7 @@ #include /** -* Invokes a ternary function accepting single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. +* Invokes a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. * * ## Notes * From 6068dd525a0bd07b54c6cf2b6531c9b937e03ba2 Mon Sep 17 00:00:00 2001 From: Athan Date: Thu, 3 Apr 2025 21:58:12 -0700 Subject: [PATCH 4/5] docs: update description Signed-off-by: Athan --- lib/node_modules/@stdlib/math/base/napi/ternary/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md index 19d6ec7a9830..89b472aa3838 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/README.md +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/README.md @@ -451,7 +451,7 @@ void stdlib_math_base_napi_fff_f( napi_env env, napi_callback_info info, float ( #### STDLIB_MATH_BASE_NAPI_MODULE_FIF_F( fcn ) -Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, a single-precision floating-point number and returning a single-precision floating-point number. +Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting a single-precision floating-point number, a signed 32-bit integer, and a single-precision floating-point number and returning a single-precision floating-point number. ```c #include From 79f7631f1657322f56803f8cfc2592b60ea3e5d2 Mon Sep 17 00:00:00 2001 From: Athan Date: Thu, 3 Apr 2025 22:00:30 -0700 Subject: [PATCH 5/5] refactor: remove unnecessary cast Signed-off-by: Athan --- lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c index 123ce00e4ef5..9bee217fc9c9 100644 --- a/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c +++ b/lib/node_modules/@stdlib/math/base/napi/ternary/src/fif_f.c @@ -91,7 +91,7 @@ napi_value stdlib_math_base_napi_fif_f( napi_env env, napi_callback_info info, f assert( status == napi_ok ); napi_value v; - status = napi_create_double( env, (double)fcn( (float)x, (int32_t)y, (float)z ), &v ); + status = napi_create_double( env, (double)fcn( (float)x, y, (float)z ), &v ); assert( status == napi_ok ); return v;