Skip to content

feat: add macros for u_u, t_t and b_b #7800

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
189 changes: 189 additions & 0 deletions lib/node_modules/@stdlib/math/base/napi/unary/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,69 @@ console.log( headerDir );

<!-- NOTE: keep in alphabetical order according to the suffix X_X -->

#### STDLIB_MATH_BASE_NAPI_MODULE_B_B( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning 8-bit unsigned integers.

```c
#include <stdint.h>

static uint8_t scale( const uint8_t x ) {
return x * 10;
}

// ...

// Register a Node-API module:
STDLIB_MATH_BASE_NAPI_MODULE_B_B( scale );
```

The macro expects the following arguments:

- **fcn**: `uint8_t (*fcn)( uint8_t )` unary 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_b_b( env, info, fcn )

Invokes a unary function accepting and returning unsigned 8-bit integers.

```c
#include <node_api.h>
#include <stdint.h>

// ...

static uint8_t identity( const uint8_t x ) {
return 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_b_b( env, info, identity );
}

// ...
```

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] uint8_t (*fcn)( uint8_t )` unary function.

```c
void stdlib_math_base_napi_b_b( napi_env env, napi_callback_info info, uint8_t (*fcn)( uint8_t ) );
```

#### STDLIB_MATH_BASE_NAPI_MODULE_C_C( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning single-precision complex floating-point numbers.
Expand Down Expand Up @@ -610,6 +673,69 @@ The function accepts the following arguments:
void stdlib_math_base_napi_i_f( napi_env env, napi_callback_info info, float (*fcn)( int32_t ) );
```

#### STDLIB_MATH_BASE_NAPI_MODULE_T_T( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning 16-bit unsigned integers.

```c
#include <stdint.h>

static uint16_t scale( const uint16_t x ) {
return x * 10;
}

// ...

// Register a Node-API module:
STDLIB_MATH_BASE_NAPI_MODULE_T_T( scale );
```

The macro expects the following arguments:

- **fcn**: `uint16_t (*fcn)( uint16_t )` unary 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_t_t( env, info, fcn )

Invokes a unary function accepting and returning unsigned 16-bit integers.

```c
#include <node_api.h>
#include <stdint.h>

// ...

static uint16_t identity( const uint16_t x ) {
return 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_t_t( env, info, identity );
}

// ...
```

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] uint16_t (*fcn)( uint16_t )` unary function.

```c
void stdlib_math_base_napi_t_t( napi_env env, napi_callback_info info, uint16_t (*fcn)( uint16_t ) );
```

#### STDLIB_MATH_BASE_NAPI_MODULE_I_I( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning 32-bit signed integers.
Expand Down Expand Up @@ -673,6 +799,69 @@ The function accepts the following arguments:
void stdlib_math_base_napi_i_i( napi_env env, napi_callback_info info, int32_t (*fcn)( int32_t ) );
```

#### STDLIB_MATH_BASE_NAPI_MODULE_U_U( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting and returning 32-bit unsigned integers.

```c
#include <stdint.h>

static uint32_t scale( const uint32_t x ) {
return x * 10;
}

// ...

// Register a Node-API module:
STDLIB_MATH_BASE_NAPI_MODULE_U_U( scale );
```

The macro expects the following arguments:

- **fcn**: `uint32_t (*fcn)( uint32_t )` unary 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_u_u( env, info, fcn )

Invokes a unary function accepting and returning unsigned 32-bit integers.

```c
#include <node_api.h>
#include <stdint.h>

// ...

static uint32_t identity( const uint32_t x ) {
return 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_u_u( env, info, identity );
}

// ...
```

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] uint32_t (*fcn)( uint32_t )` unary function.

```c
void stdlib_math_base_napi_u_u( napi_env env, napi_callback_info info, uint32_t (*fcn)( uint32_t ) );
```

#### STDLIB_MATH_BASE_NAPI_MODULE_Z_D( fcn )

Macro for registering a Node-API module exporting an interface for invoking a unary function accepting a double-precision complex floating-point number and returning a double-precision floating-point number.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#define STDLIB_MATH_BASE_NAPI_UNARY_H

// NOTE: keep in alphabetical order...
#include "stdlib/math/base/napi/unary/b_b.h"
#include "stdlib/math/base/napi/unary/c_c.h"
#include "stdlib/math/base/napi/unary/c_f.h"
#include "stdlib/math/base/napi/unary/d_d.h"
Expand All @@ -29,6 +30,8 @@
#include "stdlib/math/base/napi/unary/i_d.h"
#include "stdlib/math/base/napi/unary/i_f.h"
#include "stdlib/math/base/napi/unary/i_i.h"
#include "stdlib/math/base/napi/unary/t_t.h"
#include "stdlib/math/base/napi/unary/u_u.h"
#include "stdlib/math/base/napi/unary/z_d.h"
#include "stdlib/math/base/napi/unary/z_z.h"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* @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_UNARY_B_B_H
#define STDLIB_MATH_BASE_NAPI_UNARY_B_B_H

#include <node_api.h>
#include <assert.h>
#include <stdint.h>

/**
* Macro for registering a Node-API module exporting an interface invoking a unary function accepting and returning 8-bit unsigned integers.
*
* @param fcn unary function
*
* @example
* #include <stdint.h>
*
* static uint8_t scale( const uint8_t x ) {
* return x * 10;
* }
*
* // ...
*
* // Register a Node-API module:
* STDLIB_MATH_BASE_NAPI_MODULE_B_B( scale );
*/
#define STDLIB_MATH_BASE_NAPI_MODULE_B_B( fcn ) \
static napi_value stdlib_math_base_napi_b_b_wrapper( \
napi_env env, \
napi_callback_info info \
) { \
return stdlib_math_base_napi_b_b( env, info, fcn ); \
}; \
static napi_value stdlib_math_base_napi_b_b_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_b_b_wrapper, \
NULL, \
&f \
); \
assert( status == napi_ok ); \
return f; \
}; \
NAPI_MODULE( NODE_GYP_MODULE_NAME, stdlib_math_base_napi_b_b_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.
*/
#ifdef __cplusplus
extern "C" {
#endif

/**
* Invokes a unary function accepting and returning unsigned 8-bit integers.
*/
napi_value stdlib_math_base_napi_b_b( napi_env env, napi_callback_info info, uint8_t (*fcn)( uint8_t ) );

#ifdef __cplusplus
}
#endif

#endif // !STDLIB_MATH_BASE_NAPI_UNARY_B_B_H

Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
/**
* @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_UNARY_T_T_H
#define STDLIB_MATH_BASE_NAPI_UNARY_T_T_H

#include <node_api.h>
#include <assert.h>
#include <stdint.h>

/**
* Macro for registering a Node-API module exporting an interface invoking a unary function accepting and returning 16-bit unsigned integers.
*
* @param fcn unary function
*
* @example
* #include <stdint.h>
*
* static uint16_t scale( const uint16_t x ) {
* return x * 10;
* }
*
* // ...
*
* // Register a Node-API module:
* STDLIB_MATH_BASE_NAPI_MODULE_T_T( scale );
*/
#define STDLIB_MATH_BASE_NAPI_MODULE_T_T( fcn ) \
static napi_value stdlib_math_base_napi_t_t_wrapper( \
napi_env env, \
napi_callback_info info \
) { \
return stdlib_math_base_napi_t_t( env, info, fcn ); \
}; \
static napi_value stdlib_math_base_napi_t_t_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_t_t_wrapper, \
NULL, \
&f \
); \
assert( status == napi_ok ); \
return f; \
}; \
NAPI_MODULE( NODE_GYP_MODULE_NAME, stdlib_math_base_napi_t_t_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.
*/
#ifdef __cplusplus
extern "C" {
#endif

/**
* Invokes a unary function accepting and returning unsigned 16-bit integers.
*/
napi_value stdlib_math_base_napi_t_t( napi_env env, napi_callback_info info, uint16_t (*fcn)( uint16_t ) );

#ifdef __cplusplus
}
#endif

#endif // !STDLIB_MATH_BASE_NAPI_UNARY_T_T_H

Loading