time-to-botec

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

README.md (6013B)


      1 <!--
      2 
      3 @license Apache-2.0
      4 
      5 Copyright (c) 2018 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 # Strided Iterator
     22 
     23 > Create an [iterator][mdn-iterator-protocol] from a strided array-like object.
     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 stridedarray2iterator = require( '@stdlib/array/to-strided-iterator' );
     41 ```
     42 
     43 #### stridedarray2iterator( N, src, stride, offset\[, mapFcn\[, thisArg]] )
     44 
     45 Returns an [iterator][mdn-iterator-protocol] which iterates over elements in an array-like `object` according to specified stride parameters.
     46 
     47 ```javascript
     48 var values = [ 1, 2, 3, 4, 5, 6, 7, 8 ];
     49 
     50 var N = 4;
     51 var stride = -2;
     52 var offset = 6;
     53 
     54 var it = stridedarray2iterator( N, values, stride, offset );
     55 // returns <Object>
     56 
     57 var v = it.next().value;
     58 // returns 7
     59 
     60 v = it.next().value;
     61 // returns 5
     62 
     63 v = it.next().value;
     64 // returns 3
     65 
     66 // ...
     67 ```
     68 
     69 The returned [iterator][mdn-iterator-protocol] protocol-compliant object has the following properties:
     70 
     71 -   **next**: function which returns an [iterator][mdn-iterator-protocol] protocol-compliant object containing the next iterated value (if one exists) assigned to a `value` property and a `done` property having a `boolean` value indicating whether the [iterator][mdn-iterator-protocol] is finished.
     72 -   **return**: function which closes an [iterator][mdn-iterator-protocol] and returns a single (optional) argument in an iterator protocol-compliant object.
     73 
     74 To invoke a function for each `src` value, provide a callback function.
     75 
     76 ```javascript
     77 function fcn( v ) {
     78     return v * 10.0;
     79 }
     80 
     81 var it = stridedarray2iterator( 4, [ 1, 2, 3, 4 ], 1, 0, fcn );
     82 // returns <Object>
     83 
     84 var v = it.next().value;
     85 // returns 10.0
     86 
     87 v = it.next().value;
     88 // returns 20.0
     89 
     90 v = it.next().value;
     91 // returns 30.0
     92 
     93 // ...
     94 ```
     95 
     96 The invoked function is provided four arguments:
     97 
     98 -   `value`: iterated value
     99 -   `index`: iterated value index
    100 -   `n`: iteration count (zero-based)
    101 -   `src`: source array-like object
    102 
    103 ```javascript
    104 function fcn( v, i ) {
    105     return v * (i+1);
    106 }
    107 
    108 var it = stridedarray2iterator( 4, [ 1, 2, 3, 4 ], 1, 0, fcn );
    109 // returns <Object>
    110 
    111 var v = it.next().value;
    112 // returns 1
    113 
    114 v = it.next().value;
    115 // returns 4
    116 
    117 v = it.next().value;
    118 // returns 9
    119 
    120 // ...
    121 ```
    122 
    123 To set the callback function execution context, provide a `thisArg`.
    124 
    125 ```javascript
    126 function fcn( v ) {
    127     this.count += 1;
    128     return v * 10.0;
    129 }
    130 
    131 var ctx = {
    132     'count': 0
    133 };
    134 
    135 var it = stridedarray2iterator( 4, [ 1, 2, 3, 4 ], 1, 0, fcn, ctx );
    136 // returns <Object>
    137 
    138 var v = it.next().value;
    139 // returns 10.0
    140 
    141 v = it.next().value;
    142 // returns 20.0
    143 
    144 v = it.next().value;
    145 // returns 30.0
    146 
    147 var count = ctx.count;
    148 // returns 3
    149 ```
    150 
    151 </section>
    152 
    153 <!-- /.usage -->
    154 
    155 <!-- Package usage notes. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
    156 
    157 <section class="notes">
    158 
    159 ## Notes
    160 
    161 -   If an environment supports `Symbol.iterator`, the returned [iterator][mdn-iterator-protocol] is iterable.
    162 -   If provided a generic `array`, the returned [iterator][mdn-iterator-protocol] does **not** ignore holes. To achieve greater performance for sparse arrays, use a custom [iterator][mdn-iterator-protocol].
    163 -   A returned [iterator][mdn-iterator-protocol] does **not** copy a provided array-like `object`. To ensure iterable reproducibility, copy a provided array-like `object` **before** creating an [iterator][mdn-iterator-protocol]. Otherwise, any changes to the contents of an array-like `object` will be reflected in the returned [iterator][mdn-iterator-protocol].
    164 -   In environments supporting `Symbol.iterator`, the function **explicitly** does **not** invoke an array's `@@iterator` method, regardless of whether this method is defined. To convert an array to an implementation defined [iterator][mdn-iterator-protocol], invoke this method directly.
    165 
    166 </section>
    167 
    168 <!-- /.notes -->
    169 
    170 <!-- Package usage examples. -->
    171 
    172 <section class="examples">
    173 
    174 ## Examples
    175 
    176 <!-- eslint no-undef: "error" -->
    177 
    178 ```javascript
    179 var Float64Array = require( '@stdlib/array/float64' );
    180 var inmap = require( '@stdlib/utils/inmap' );
    181 var randu = require( '@stdlib/random/base/randu' );
    182 var stridedarray2iterator = require( '@stdlib/array/to-strided-iterator' );
    183 
    184 function scale( v, i ) {
    185     return v * (i+1);
    186 }
    187 
    188 // Create an array filled with random numbers:
    189 var arr = inmap( new Float64Array( 100 ), randu );
    190 
    191 // Create an iterator which scales every fourth value in reverse order:
    192 var it = stridedarray2iterator( 25, arr, -4, 99, scale );
    193 
    194 // Perform manual iteration...
    195 var v;
    196 while ( true ) {
    197     v = it.next();
    198     if ( v.done ) {
    199         break;
    200     }
    201     console.log( v.value );
    202 }
    203 ```
    204 
    205 </section>
    206 
    207 <!-- /.examples -->
    208 
    209 <!-- 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. -->
    210 
    211 <section class="references">
    212 
    213 </section>
    214 
    215 <!-- /.references -->
    216 
    217 <!-- Section for all links. Make sure to keep an empty line after the `section` element and another before the `/section` close. -->
    218 
    219 <section class="links">
    220 
    221 [mdn-iterator-protocol]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#The_iterator_protocol
    222 
    223 </section>
    224 
    225 <!-- /.links -->