time-to-botec

Benchmark sampling in different programming languages
Log | Files | Refs | README

README.md (6373B)


      1 <!--
      2 
      3 @license Apache-2.0
      4 
      5 Copyright (c) 2020 The Stdlib Authors.
      6 
      7 Licensed under the Apache License, Version 2.0 (the "License");
      8 you may not use this file except in compliance with the License.
      9 You may obtain a copy of the License at
     10 
     11    http://www.apache.org/licenses/LICENSE-2.0
     12 
     13 Unless required by applicable law or agreed to in writing, software
     14 distributed under the License is distributed on an "AS IS" BASIS,
     15 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     16 See the License for the specific language governing permissions and
     17 limitations under the License.
     18 
     19 -->
     20 
     21 # ternary
     22 
     23 > C APIs for registering a Node-API module exporting interfaces for invoking ternary numerical functions.
     24 
     25 <!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
     26 
     27 <section class="intro">
     28 
     29 </section>
     30 
     31 <!-- /.intro -->
     32 
     33 <!-- Package usage documentation. -->
     34 
     35 <section class="usage">
     36 
     37 ## Usage
     38 
     39 ```javascript
     40 var headerDir = require( '@stdlib/math/base/napi/ternary' );
     41 ```
     42 
     43 #### headerDir
     44 
     45 Absolute file path for the directory containing header files for C APIs.
     46 
     47 ```javascript
     48 var dir = headerDir;
     49 // returns <string>
     50 ```
     51 
     52 </section>
     53 
     54 <!-- /.usage -->
     55 
     56 <!-- Package usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
     57 
     58 <section class="notes">
     59 
     60 </section>
     61 
     62 <!-- /.notes -->
     63 
     64 <!-- Package usage examples. -->
     65 
     66 <section class="examples">
     67 
     68 ## Examples
     69 
     70 ```javascript
     71 var headerDir = require( '@stdlib/math/base/napi/ternary' );
     72 
     73 console.log( headerDir );
     74 // => <string>
     75 ```
     76 
     77 </section>
     78 
     79 <!-- /.examples -->
     80 
     81 <!-- C interface documentation. -->
     82 
     83 * * *
     84 
     85 <section class="c">
     86 
     87 ## C APIs
     88 
     89 <!-- Section to include introductory text. Make sure to keep an empty line after the intro `section` element and another before the `/section` close. -->
     90 
     91 <section class="intro">
     92 
     93 </section>
     94 
     95 <!-- /.intro -->
     96 
     97 <!-- C usage documentation. -->
     98 
     99 <section class="usage">
    100 
    101 ### Usage
    102 
    103 ```c
    104 #include "stdlib/math/base/napi/ternary.h"
    105 ```
    106 
    107 #### stdlib_math_base_napi_ddd_d( env, info, fcn )
    108 
    109 Invokes a ternary function accepting and returning double-precision floating-point numbers.
    110 
    111 ```c
    112 #include <node_api.h>
    113 
    114 // ...
    115 
    116 static double add( const double x, const double y, const double z ) {
    117     return x + y + z;
    118 }
    119 
    120 // ...
    121 
    122 /**
    123 * Receives JavaScript callback invocation data.
    124 *
    125 * @param env    environment under which the function is invoked
    126 * @param info   callback data
    127 * @return       Node-API value
    128 */
    129 napi_value addon( napi_env env, napi_callback_info info ) {
    130     return stdlib_math_base_napi_ddd_d( env, info, add );
    131 }
    132 
    133 // ...
    134 ```
    135 
    136 The function accepts the following arguments:
    137 
    138 -   **env**: `[in] napi_env` environment under which the function is invoked.
    139 -   **info**: `[in] napi_callback_info` callback data.
    140 -   **fcn**: `[in] double (*fcn)( double, double, double )` ternary function.
    141 
    142 ```c
    143 void stdlib_math_base_napi_ddd_d( napi_env env, napi_callback_info info, double (*fcn)( double, double, double ) );
    144 ```
    145 
    146 #### stdlib_math_base_napi_fff_f( env, info, fcn )
    147 
    148 Invokes a ternary function accepting and returning single-precision floating-point numbers.
    149 
    150 ```c
    151 #include <node_api.h>
    152 
    153 // ...
    154 
    155 static float addf( const float x, const float y, const float z ) {
    156     return x + y + z;
    157 }
    158 
    159 // ...
    160 
    161 /**
    162 * Receives JavaScript callback invocation data.
    163 *
    164 * @param env    environment under which the function is invoked
    165 * @param info   callback data
    166 * @return       Node-API value
    167 */
    168 napi_value addon( napi_env env, napi_callback_info info ) {
    169     return stdlib_math_base_napi_fff_f( env, info, addf );
    170 }
    171 
    172 // ...
    173 ```
    174 
    175 The function accepts the following arguments:
    176 
    177 -   **env**: `[in] napi_env` environment under which the function is invoked.
    178 -   **info**: `[in] napi_callback_info` callback data.
    179 -   **fcn**: `[in] float (*fcn)( float, float, float )` ternary function.
    180 
    181 ```c
    182 void stdlib_math_base_napi_fff_f( napi_env env, napi_callback_info info, float (*fcn)( float, float, float ) );
    183 ```
    184 
    185 #### STDLIB_MATH_BASE_NAPI_MODULE_DDD_D( fcn )
    186 
    187 Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting and returning double-precision floating-point numbers.
    188 
    189 ```c
    190 static double add( const double x, const double y, const double z ) {
    191     return x + y + z;
    192 }
    193 
    194 // ...
    195 
    196 // Register a Node-API module:
    197 STDLIB_MATH_BASE_NAPI_MODULE_DDD_D( add );
    198 ```
    199 
    200 The macro expects the following arguments:
    201 
    202 -   **fcn**: `double (*fcn)( double, double, double )` ternary function.
    203 
    204 When used, this macro should be used **instead of** `NAPI_MODULE`. The macro includes `NAPI_MODULE`, thus ensuring Node-API module registration.
    205 
    206 #### STDLIB_MATH_BASE_NAPI_MODULE_FFF_F( fcn )
    207 
    208 Macro for registering a Node-API module exporting an interface for invoking a ternary function accepting and returning single-precision floating-point numbers.
    209 
    210 ```c
    211 static float addf( const float x, const float y, const float z ) {
    212     return x + y + z;
    213 }
    214 
    215 // ...
    216 
    217 // Register a Node-API module:
    218 STDLIB_MATH_BASE_NAPI_MODULE_FFF_F( addf );
    219 ```
    220 
    221 The macro expects the following arguments:
    222 
    223 -   **fcn**: `float (*fcn)( float, float, float )` ternary function.
    224 
    225 When used, this macro should be used **instead of** `NAPI_MODULE`. The macro includes `NAPI_MODULE`, thus ensuring Node-API module registration.
    226 
    227 </section>
    228 
    229 <!-- /.usage -->
    230 
    231 <!-- C API usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
    232 
    233 <section class="notes">
    234 
    235 ### Notes
    236 
    237 -   The C-API functions expect that the callback `info` argument provides access to the following JavaScript arguments:
    238 
    239     -   `x`: input value.
    240     -   `y`: input value.
    241     -   `z`: input value.
    242 
    243 </section>
    244 
    245 <!-- /.notes -->
    246 
    247 <!-- C API usage examples. -->
    248 
    249 <section class="examples">
    250 
    251 </section>
    252 
    253 <!-- /.examples -->
    254 
    255 </section>
    256 
    257 <!-- /.c -->
    258 
    259 <!-- Section to include cited references. If references are included, add a horizontal rule *before* the section. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
    260 
    261 <section class="references">
    262 
    263 </section>
    264 
    265 <!-- /.references -->
    266 
    267 <!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
    268 
    269 <section class="links">
    270 
    271 </section>
    272 
    273 <!-- /.links -->