time-to-botec/js/node_modules/@stdlib/math/special/abs/src/addon.c
NunoSempere b6addc7f05 feat: add the node modules
Necessary in order to clearly see the squiggle hotwiring.
2022-12-03 12:44:49 +00:00

276 lines
6.4 KiB
C

/**
* @license Apache-2.0
*
* Copyright (c) 2021 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/special/abs.h"
#include "stdlib/math/base/special/absf.h"
#include "stdlib/math/base/special/labs.h"
#include "stdlib/ndarray/base/function_object.h"
#include "stdlib/ndarray/base/napi/unary.h"
#include "stdlib/ndarray/base/unary.h"
#include "stdlib/ndarray/dtypes.h"
#include <stdint.h>
/**
* Evaluates the identity function for an unsigned 32-bit integer.
*
* @param x input value
* @return input value
*/
static uint32_t identity_u( const uint32_t x ) {
return x;
}
/**
* Evaluates the identity function for an unsigned 16-bit integer.
*
* @param x input value
* @return input value
*/
static uint16_t identity_t( const uint16_t x ) {
return x;
}
/**
* Evaluates the identity function for an unsigned 8-bit integer.
*
* @param x input value
* @return input value
*/
static uint8_t identity_b( const uint8_t x ) {
return x;
}
/**
* Computes the absolute value of a signed 16-bit integer.
*
* @param x input value
* @return absolute value
*/
static int16_t abs_k( const int16_t x ) {
if ( x < 0 ) {
return -x;
}
return x;
}
/**
* Computes the absolute value of a signed 8-bit integer.
*
* @param x input value
* @return absolute value
*/
static int8_t abs_s( const int8_t x ) {
if ( x < 0 ) {
return -x;
}
return x;
}
// Define an interface name:
static const char name[] = "stdlib_ndarray_abs";
// Define a list of ndarray functions:
static ndarrayFcn functions[] = {
// NOTE: these are ordered according to likelihood of use (e.g., more likely that `float64` arrays are provided than `uint8`)
// float64 (1)
stdlib_ndarray_d_d,
// float32 (2)
stdlib_ndarray_f_f,
stdlib_ndarray_f_d,
// int32 (3)
stdlib_ndarray_i_i,
stdlib_ndarray_i_u,
stdlib_ndarray_i_d,
// int16 (6)
stdlib_ndarray_k_k,
stdlib_ndarray_k_i,
stdlib_ndarray_k_t,
stdlib_ndarray_k_u,
stdlib_ndarray_k_f,
stdlib_ndarray_k_d,
// int8 (8)
stdlib_ndarray_s_s,
stdlib_ndarray_s_k,
stdlib_ndarray_s_i,
stdlib_ndarray_s_b,
stdlib_ndarray_s_t,
stdlib_ndarray_s_u,
stdlib_ndarray_s_f,
stdlib_ndarray_s_d,
// uint32 (2)
stdlib_ndarray_u_u,
stdlib_ndarray_u_d,
// uint16 (5)
stdlib_ndarray_t_i,
stdlib_ndarray_t_t,
stdlib_ndarray_t_u,
stdlib_ndarray_t_f,
stdlib_ndarray_t_d,
// uint8 (7)
stdlib_ndarray_b_k,
stdlib_ndarray_b_i,
stdlib_ndarray_b_b,
stdlib_ndarray_b_t,
stdlib_ndarray_b_u,
stdlib_ndarray_b_f,
stdlib_ndarray_b_d
};
// Define the **ndarray** argument types for each ndarray function:
static int32_t types[] = {
// float64 (1)
STDLIB_NDARRAY_FLOAT64, STDLIB_NDARRAY_FLOAT64,
// float32 (2)
STDLIB_NDARRAY_FLOAT32, STDLIB_NDARRAY_FLOAT32,
STDLIB_NDARRAY_FLOAT32, STDLIB_NDARRAY_FLOAT64,
// int32 (3)
STDLIB_NDARRAY_INT32, STDLIB_NDARRAY_INT32,
STDLIB_NDARRAY_INT32, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_INT32, STDLIB_NDARRAY_FLOAT64,
// int16 (6)
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_INT16,
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_INT32,
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_UINT16,
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_FLOAT32,
STDLIB_NDARRAY_INT16, STDLIB_NDARRAY_FLOAT64,
// int8 (8)
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_INT8,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_INT16,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_INT32,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_UINT8,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_UINT16,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_FLOAT32,
STDLIB_NDARRAY_INT8, STDLIB_NDARRAY_FLOAT64,
// uint32 (2)
STDLIB_NDARRAY_UINT32, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_UINT32, STDLIB_NDARRAY_FLOAT64,
// uint16 (5)
STDLIB_NDARRAY_UINT16, STDLIB_NDARRAY_INT32,
STDLIB_NDARRAY_UINT16, STDLIB_NDARRAY_UINT16,
STDLIB_NDARRAY_UINT16, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_UINT16, STDLIB_NDARRAY_FLOAT32,
STDLIB_NDARRAY_UINT16, STDLIB_NDARRAY_FLOAT64,
// uint8 (7)
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_INT16,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_INT32,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_UINT8,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_UINT16,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_UINT32,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_FLOAT32,
STDLIB_NDARRAY_UINT8, STDLIB_NDARRAY_FLOAT64
};
// Define a list of ndarray function "data" (in this case, callbacks):
static void *data[] = {
// float64 (1)
(void *)stdlib_base_abs,
// float32 (2)
(void *)stdlib_base_absf,
(void *)stdlib_base_absf,
// int32 (3)
(void *)stdlib_base_labs,
(void *)stdlib_base_labs,
(void *)stdlib_base_labs,
// int16 (6)
(void *)abs_k,
(void *)abs_k,
(void *)abs_k,
(void *)abs_k,
(void *)abs_k,
(void *)abs_k,
// int8 (8)
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
(void *)abs_s,
// uint32 (2)
(void *)identity_u,
(void *)identity_u,
// uint16 (5)
(void *)identity_t,
(void *)identity_t,
(void *)identity_t,
(void *)identity_t,
(void *)identity_t,
// uint8 (7)
(void *)identity_b,
(void *)identity_b,
(void *)identity_b,
(void *)identity_b,
(void *)identity_b,
(void *)identity_b,
(void *)identity_b
};
// Create an ndarray function object:
static const struct ndarrayFunctionObject obj = {
// ndarray function name:
name,
// Number of input ndarrays:
1,
// Number of output ndarrays:
1,
// Total number of ndarray arguments (nin + nout):
2,
// Array containing ndarray functions:
functions,
// Number of ndarray functions:
34,
// Array of type "numbers" (as enumerated elsewhere), where the total number of types equals `narrays * nfunctions` and where each set of `narrays` consecutive types (non-overlapping) corresponds to the set of ndarray argument types for a corresponding ndarray function:
types,
// Array of void pointers corresponding to the "data" (e.g., callbacks) which should be passed to a respective ndarray function (note: the number of pointers should match the number of ndarray functions):
data
};
STDLIB_NDARRAY_NAPI_MODULE_UNARY( obj )