@stdlib/array-complex64 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/main.js CHANGED
@@ -28,6 +28,7 @@ var isCollection = require( '@stdlib/assert-is-collection' );
28
28
  var isArrayBuffer = require( '@stdlib/assert-is-arraybuffer' );
29
29
  var isObject = require( '@stdlib/assert-is-object' );
30
30
  var isArray = require( '@stdlib/assert-is-array' );
31
+ var isStringArray = require( '@stdlib/assert-is-string-array' ).primitives;
31
32
  var isString = require( '@stdlib/assert-is-string' ).isPrimitive;
32
33
  var isFunction = require( '@stdlib/assert-is-function' );
33
34
  var isComplexLike = require( '@stdlib/assert-is-complex-like' );
@@ -40,10 +41,10 @@ var ITERATOR_SYMBOL = require( '@stdlib/symbol-iterator' );
40
41
  var setReadOnly = require( '@stdlib/utils-define-nonenumerable-read-only-property' );
41
42
  var setReadOnlyAccessor = require( '@stdlib/utils-define-nonenumerable-read-only-accessor' );
42
43
  var Float32Array = require( '@stdlib/array-float32' );
43
- var Complex64 = require( '@stdlib/complex-float32' );
44
+ var Complex64 = require( '@stdlib/complex-float32-ctor' );
44
45
  var format = require( '@stdlib/string-format' );
45
- var realf = require( '@stdlib/complex-realf' );
46
- var imagf = require( '@stdlib/complex-imagf' );
46
+ var realf = require( '@stdlib/complex-float32-real' );
47
+ var imagf = require( '@stdlib/complex-float32-imag' );
47
48
  var floor = require( '@stdlib/math-base-special-floor' );
48
49
  var reinterpret64 = require( '@stdlib/strided-base-reinterpret-complex64' );
49
50
  var reinterpret128 = require( '@stdlib/strided-base-reinterpret-complex128' );
@@ -354,7 +355,7 @@ setReadOnly( Complex64Array, 'name', 'Complex64Array' );
354
355
  * // returns 1
355
356
  *
356
357
  * @example
357
- * var Complex64 = require( '@stdlib/complex-float32' );
358
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
358
359
  *
359
360
  * var arr = Complex64Array.from( [ new Complex64( 1.0, 1.0 ) ] );
360
361
  * // returns <Complex64Array>
@@ -363,9 +364,9 @@ setReadOnly( Complex64Array, 'name', 'Complex64Array' );
363
364
  * // returns 1
364
365
  *
365
366
  * @example
366
- * var Complex64 = require( '@stdlib/complex-float32' );
367
- * var realf = require( '@stdlib/complex-realf' );
368
- * var imagf = require( '@stdlib/complex-imagf' );
367
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
368
+ * var realf = require( '@stdlib/complex-float32-real' );
369
+ * var imagf = require( '@stdlib/complex-float32-imag' );
369
370
  *
370
371
  * function clbk( v ) {
371
372
  * return new Complex64( realf(v)*2.0, imagf(v)*2.0 );
@@ -550,8 +551,8 @@ setReadOnly( Complex64Array, 'of', function of() {
550
551
  *
551
552
  * @example
552
553
  * var arr = new Complex64Array( 10 );
553
- * var realf = require( '@stdlib/complex-realf' );
554
- * var imagf = require( '@stdlib/complex-imagf' );
554
+ * var realf = require( '@stdlib/complex-float32-real' );
555
+ * var imagf = require( '@stdlib/complex-float32-imag' );
555
556
  *
556
557
  * var z = arr.at( 0 );
557
558
  * // returns <Complex64>
@@ -690,9 +691,9 @@ setReadOnly( Complex64Array.prototype, 'BYTES_PER_ELEMENT', Complex64Array.BYTES
690
691
  * @returns {Complex64Array} modified array
691
692
  *
692
693
  * @example
693
- * var Complex64 = require( '@stdlib/complex-float32' );
694
- * var realf = require( '@stdlib/complex-realf' );
695
- * var imagf = require( '@stdlib/complex-imagf' );
694
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
695
+ * var realf = require( '@stdlib/complex-float32-real' );
696
+ * var imagf = require( '@stdlib/complex-float32-imag' );
696
697
  *
697
698
  * var arr = new Complex64Array( 4 );
698
699
  *
@@ -737,7 +738,7 @@ setReadOnly( Complex64Array.prototype, 'copyWithin', function copyWithin( target
737
738
  * @returns {Iterator} iterator
738
739
  *
739
740
  * @example
740
- * var Complex64 = require( '@stdlib/complex-float32' );
741
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
741
742
  *
742
743
  * var arr = [
743
744
  * new Complex64( 1.0, 1.0 ),
@@ -763,23 +764,21 @@ setReadOnly( Complex64Array.prototype, 'copyWithin', function copyWithin( target
763
764
  * // returns true
764
765
  */
765
766
  setReadOnly( Complex64Array.prototype, 'entries', function entries() {
766
- var buffer;
767
767
  var self;
768
768
  var iter;
769
769
  var len;
770
+ var buf;
770
771
  var FLG;
771
772
  var i;
772
- var j;
773
773
  if ( !isComplexArray( this ) ) {
774
774
  throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
775
775
  }
776
776
  self = this;
777
- buffer = this._buffer;
777
+ buf = this._buffer;
778
778
  len = this._length;
779
779
 
780
- // Initialize the iteration indices:
780
+ // Initialize an iteration index:
781
781
  i = -1;
782
- j = -2;
783
782
 
784
783
  // Create an iterator protocol-compliant object:
785
784
  iter = {};
@@ -798,17 +797,14 @@ setReadOnly( Complex64Array.prototype, 'entries', function entries() {
798
797
  * @returns {Object} iterator protocol-compliant object
799
798
  */
800
799
  function next() {
801
- var z;
802
800
  i += 1;
803
801
  if ( FLG || i >= len ) {
804
802
  return {
805
803
  'done': true
806
804
  };
807
805
  }
808
- j += 2;
809
- z = new Complex64( buffer[ j ], buffer[ j+1 ] );
810
806
  return {
811
- 'value': [ i, z ],
807
+ 'value': [ i, getComplex64( buf, i ) ],
812
808
  'done': false
813
809
  };
814
810
  }
@@ -857,8 +853,8 @@ setReadOnly( Complex64Array.prototype, 'entries', function entries() {
857
853
  * @returns {boolean} boolean indicating whether all elements pass a test
858
854
  *
859
855
  * @example
860
- * var realf = require( '@stdlib/complex-realf' );
861
- * var imagf = require( '@stdlib/complex-imagf' );
856
+ * var realf = require( '@stdlib/complex-float32-real' );
857
+ * var imagf = require( '@stdlib/complex-float32-imag' );
862
858
  *
863
859
  * function predicate( v ) {
864
860
  * return ( realf( v ) === imagf( v ) );
@@ -904,10 +900,11 @@ setReadOnly( Complex64Array.prototype, 'every', function every( predicate, thisA
904
900
  * @throws {TypeError} first argument must be a complex number
905
901
  * @throws {TypeError} second argument must be an integer
906
902
  * @throws {TypeError} third argument must be an integer
903
+ * @returns {Complex64Array} modified array
907
904
  *
908
905
  * @example
909
- * var realf = require( '@stdlib/complex-realf' );
910
- * var imagf = require( '@stdlib/complex-imagf' );
906
+ * var realf = require( '@stdlib/complex-float32-real' );
907
+ * var imagf = require( '@stdlib/complex-float32-imag' );
911
908
  *
912
909
  * var arr = new Complex64Array( 3 );
913
910
  *
@@ -922,7 +919,7 @@ setReadOnly( Complex64Array.prototype, 'every', function every( predicate, thisA
922
919
  * var im = imagf( z );
923
920
  * // returns 1.0
924
921
  *
925
- * z = arr.get( 1 );
922
+ * z = arr.get( 2 );
926
923
  * // returns <Complex64>
927
924
  *
928
925
  * re = realf( z );
@@ -999,8 +996,8 @@ setReadOnly( Complex64Array.prototype, 'fill', function fill( value, start, end
999
996
  * @returns {Complex64Array} complex number array
1000
997
  *
1001
998
  * @example
1002
- * var realf = require( '@stdlib/complex-realf' );
1003
- * var imagf = require( '@stdlib/complex-imagf' );
999
+ * var realf = require( '@stdlib/complex-float32-real' );
1000
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1004
1001
  *
1005
1002
  * function predicate( v ) {
1006
1003
  * return ( realf( v ) === imagf( v ) );
@@ -1062,9 +1059,9 @@ setReadOnly( Complex64Array.prototype, 'filter', function filter( predicate, thi
1062
1059
  * @returns {(Complex64|void)} array element or undefined
1063
1060
  *
1064
1061
  * @example
1065
- * var realf = require( '@stdlib/complex-realf' );
1066
- * var imagf = require( '@stdlib/complex-imagf' );
1067
- * var Complex64 = require( '@stdlib/complex-float32' );
1062
+ * var realf = require( '@stdlib/complex-float32-real' );
1063
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1064
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1068
1065
  *
1069
1066
  * function predicate( v ) {
1070
1067
  * return ( realf( v ) === imagf( v ) );
@@ -1117,9 +1114,9 @@ setReadOnly( Complex64Array.prototype, 'find', function find( predicate, thisArg
1117
1114
  * @returns {integer} index or -1
1118
1115
  *
1119
1116
  * @example
1120
- * var Complex64 = require( '@stdlib/complex-float32' );
1121
- * var realf = require( '@stdlib/complex-realf' );
1122
- * var imagf = require( '@stdlib/complex-imagf' );
1117
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1118
+ * var realf = require( '@stdlib/complex-float32-real' );
1119
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1123
1120
  *
1124
1121
  * function predicate( v ) {
1125
1122
  * return ( realf( v ) === imagf( v ) );
@@ -1167,9 +1164,9 @@ setReadOnly( Complex64Array.prototype, 'findIndex', function findIndex( predicat
1167
1164
  * @returns {(Complex64|void)} array element or undefined
1168
1165
  *
1169
1166
  * @example
1170
- * var realf = require( '@stdlib/complex-realf' );
1171
- * var imagf = require( '@stdlib/complex-imagf' );
1172
- * var Complex64 = require( '@stdlib/complex-float32' );
1167
+ * var realf = require( '@stdlib/complex-float32-real' );
1168
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1169
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1173
1170
  *
1174
1171
  * function predicate( v ) {
1175
1172
  * return ( realf( v ) === imagf( v ) );
@@ -1222,9 +1219,9 @@ setReadOnly( Complex64Array.prototype, 'findLast', function findLast( predicate,
1222
1219
  * @returns {integer} index or -1
1223
1220
  *
1224
1221
  * @example
1225
- * var Complex64 = require( '@stdlib/complex-float32' );
1226
- * var realf = require( '@stdlib/complex-realf' );
1227
- * var imagf = require( '@stdlib/complex-imagf' );
1222
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1223
+ * var realf = require( '@stdlib/complex-float32-real' );
1224
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1228
1225
  *
1229
1226
  * function predicate( v ) {
1230
1227
  * return ( realf( v ) === imagf( v ) );
@@ -1271,7 +1268,7 @@ setReadOnly( Complex64Array.prototype, 'findLastIndex', function findLastIndex(
1271
1268
  * @throws {TypeError} first argument must be a function
1272
1269
  *
1273
1270
  * @example
1274
- * var Complex64 = require( '@stdlib/complex-float32' );
1271
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1275
1272
  *
1276
1273
  * function log( v, i ) {
1277
1274
  * console.log( '%s: %s', i, v.toString() );
@@ -1315,8 +1312,8 @@ setReadOnly( Complex64Array.prototype, 'forEach', function forEach( fcn, thisArg
1315
1312
  *
1316
1313
  * @example
1317
1314
  * var arr = new Complex64Array( 10 );
1318
- * var realf = require( '@stdlib/complex-realf' );
1319
- * var imagf = require( '@stdlib/complex-imagf' );
1315
+ * var realf = require( '@stdlib/complex-float32-real' );
1316
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1320
1317
  *
1321
1318
  * var z = arr.get( 0 );
1322
1319
  * // returns <Complex64>
@@ -1368,7 +1365,7 @@ setReadOnly( Complex64Array.prototype, 'get', function get( idx ) {
1368
1365
  * @returns {boolean} boolean indicating whether an array includes a provided value
1369
1366
  *
1370
1367
  * @example
1371
- * var Complex64 = require( '@stdlib/complex-float32' );
1368
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1372
1369
  *
1373
1370
  * var arr = new Complex64Array( 5 );
1374
1371
  *
@@ -1438,7 +1435,7 @@ setReadOnly( Complex64Array.prototype, 'includes', function includes( searchElem
1438
1435
  * @returns {integer} index or -1
1439
1436
  *
1440
1437
  * @example
1441
- * var Complex64 = require( '@stdlib/complex-float32' );
1438
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1442
1439
  *
1443
1440
  * var arr = new Complex64Array( 10 );
1444
1441
  *
@@ -1540,6 +1537,107 @@ setReadOnly( Complex64Array.prototype, 'join', function join( separator ) {
1540
1537
  return out.join( sep );
1541
1538
  });
1542
1539
 
1540
+ /**
1541
+ * Returns an iterator for iterating over each index key in a typed array.
1542
+ *
1543
+ * @name keys
1544
+ * @memberof Complex64Array.prototype
1545
+ * @type {Function}
1546
+ * @throws {TypeError} `this` must be a complex number array
1547
+ * @returns {Iterator} iterator
1548
+ *
1549
+ * @example
1550
+ * var arr = new Complex64Array( 2 );
1551
+ *
1552
+ * arr.set( [ 1.0, 1.0 ], 0 );
1553
+ * arr.set( [ 2.0, 2.0 ], 1 );
1554
+ *
1555
+ * var iter = arr.keys();
1556
+ *
1557
+ * var v = iter.next().value;
1558
+ * // returns 0
1559
+ *
1560
+ * v = iter.next().value;
1561
+ * // returns 1
1562
+ *
1563
+ * var bool = iter.next().done;
1564
+ * // returns true
1565
+ */
1566
+ setReadOnly( Complex64Array.prototype, 'keys', function keys() {
1567
+ var self;
1568
+ var iter;
1569
+ var len;
1570
+ var FLG;
1571
+ var i;
1572
+ if ( !isComplexArray( this ) ) {
1573
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
1574
+ }
1575
+ self = this;
1576
+ len = this._length;
1577
+
1578
+ // Initialize an iteration index:
1579
+ i = -1;
1580
+
1581
+ // Create an iterator protocol-compliant object:
1582
+ iter = {};
1583
+ setReadOnly( iter, 'next', next );
1584
+ setReadOnly( iter, 'return', end );
1585
+
1586
+ if ( ITERATOR_SYMBOL ) {
1587
+ setReadOnly( iter, ITERATOR_SYMBOL, factory );
1588
+ }
1589
+ return iter;
1590
+
1591
+ /**
1592
+ * Returns an iterator protocol-compliant object containing the next iterated value.
1593
+ *
1594
+ * @private
1595
+ * @returns {Object} iterator protocol-compliant object
1596
+ */
1597
+ function next() {
1598
+ i += 1;
1599
+ if ( FLG || i >= len ) {
1600
+ return {
1601
+ 'done': true
1602
+ };
1603
+ }
1604
+ return {
1605
+ 'value': i,
1606
+ 'done': false
1607
+ };
1608
+ }
1609
+
1610
+ /**
1611
+ * Finishes an iterator.
1612
+ *
1613
+ * @private
1614
+ * @param {*} [value] - value to return
1615
+ * @returns {Object} iterator protocol-compliant object
1616
+ */
1617
+ function end( value ) {
1618
+ FLG = true;
1619
+ if ( arguments.length ) {
1620
+ return {
1621
+ 'value': value,
1622
+ 'done': true
1623
+ };
1624
+ }
1625
+ return {
1626
+ 'done': true
1627
+ };
1628
+ }
1629
+
1630
+ /**
1631
+ * Returns a new iterator.
1632
+ *
1633
+ * @private
1634
+ * @returns {Iterator} iterator
1635
+ */
1636
+ function factory() {
1637
+ return self.keys();
1638
+ }
1639
+ });
1640
+
1543
1641
  /**
1544
1642
  * Returns the last index at which a given element can be found.
1545
1643
  *
@@ -1554,7 +1652,7 @@ setReadOnly( Complex64Array.prototype, 'join', function join( separator ) {
1554
1652
  * @returns {integer} index or -1
1555
1653
  *
1556
1654
  * @example
1557
- * var Complex64 = require( '@stdlib/complex-float32' );
1655
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1558
1656
  *
1559
1657
  * var arr = new Complex64Array( 5 );
1560
1658
  *
@@ -1643,9 +1741,9 @@ setReadOnlyAccessor( Complex64Array.prototype, 'length', function get() {
1643
1741
  * @returns {Complex64Array} complex number array
1644
1742
  *
1645
1743
  * @example
1646
- * var Complex64 = require( '@stdlib/complex-float32' );
1647
- * var realf = require( '@stdlib/complex-realf' );
1648
- * var imagf = require( '@stdlib/complex-imagf' );
1744
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
1745
+ * var realf = require( '@stdlib/complex-float32-real' );
1746
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1649
1747
  *
1650
1748
  * function scale( v, i ) {
1651
1749
  * return new Complex64( 2.0*realf( v ), 2.0*imagf( v ) );
@@ -1699,6 +1797,136 @@ setReadOnly( Complex64Array.prototype, 'map', function map( fcn, thisArg ) {
1699
1797
  return out;
1700
1798
  });
1701
1799
 
1800
+ /**
1801
+ * Applies a provided callback function to each element of the array, in order, passing in the return value from the calculation on the preceding element and returning the accumulated result upon completion.
1802
+ *
1803
+ * @name reduce
1804
+ * @memberof Complex64Array.prototype
1805
+ * @type {Function}
1806
+ * @param {Function} reducer - callback function
1807
+ * @param {*} [initialValue] - initial value
1808
+ * @throws {TypeError} `this` must be a complex number array
1809
+ * @throws {TypeError} first argument must be a function
1810
+ * @throws {Error} if not provided an initial value, the array must have at least one element
1811
+ * @returns {*} accumulated result
1812
+ *
1813
+ * @example
1814
+ * var realf = require( '@stdlib/complex-float32-real' );
1815
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1816
+ * var caddf = require( '@stdlib/complex-float32-base-add' );
1817
+ *
1818
+ * var arr = new Complex64Array( 3 );
1819
+ *
1820
+ * arr.set( [ 1.0, 1.0 ], 0 );
1821
+ * arr.set( [ 2.0, 2.0 ], 1 );
1822
+ * arr.set( [ 3.0, 3.0 ], 2 );
1823
+ *
1824
+ * var z = arr.reduce( caddf );
1825
+ * // returns <Complex64>
1826
+ *
1827
+ * var re = realf( z );
1828
+ * // returns 6.0
1829
+ *
1830
+ * var im = imagf( z );
1831
+ * // returns 6.0
1832
+ */
1833
+ setReadOnly( Complex64Array.prototype, 'reduce', function reduce( reducer, initialValue ) {
1834
+ var buf;
1835
+ var acc;
1836
+ var len;
1837
+ var v;
1838
+ var i;
1839
+
1840
+ if ( !isComplexArray( this ) ) {
1841
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
1842
+ }
1843
+ if ( !isFunction( reducer ) ) {
1844
+ throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', reducer ) );
1845
+ }
1846
+ buf = this._buffer;
1847
+ len = this._length;
1848
+ if ( arguments.length > 1 ) {
1849
+ acc = initialValue;
1850
+ i = 0;
1851
+ } else {
1852
+ if ( len === 0 ) {
1853
+ throw new Error( 'invalid operation. If not provided an initial value, an array must contain at least one element.' );
1854
+ }
1855
+ acc = getComplex64( buf, 0 );
1856
+ i = 1;
1857
+ }
1858
+ for ( ; i < len; i++ ) {
1859
+ v = getComplex64( buf, i );
1860
+ acc = reducer( acc, v, i, this );
1861
+ }
1862
+ return acc;
1863
+ });
1864
+
1865
+ /**
1866
+ * Applies a provided callback function to each element of the array, in reverse order, passing in the return value from the calculation on the preceding element and returning the accumulated result upon completion.
1867
+ *
1868
+ * @name reduceRight
1869
+ * @memberof Complex64Array.prototype
1870
+ * @type {Function}
1871
+ * @param {Function} reducer - callback function
1872
+ * @param {*} [initialValue] - initial value
1873
+ * @throws {TypeError} `this` must be a complex number array
1874
+ * @throws {TypeError} first argument must be a function
1875
+ * @throws {Error} if not provided an initial value, the array must have at least one element
1876
+ * @returns {*} accumulated result
1877
+ *
1878
+ * @example
1879
+ * var realf = require( '@stdlib/complex-float32-real' );
1880
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1881
+ * var caddf = require( '@stdlib/complex-float32-base-add' );
1882
+ *
1883
+ * var arr = new Complex64Array( 3 );
1884
+ *
1885
+ * arr.set( [ 1.0, 1.0 ], 0 );
1886
+ * arr.set( [ 2.0, 2.0 ], 1 );
1887
+ * arr.set( [ 3.0, 3.0 ], 2 );
1888
+ *
1889
+ * var z = arr.reduceRight( caddf );
1890
+ * // returns <Complex64>
1891
+ *
1892
+ * var re = realf( z );
1893
+ * // returns 6.0
1894
+ *
1895
+ * var im = imagf( z );
1896
+ * // returns 6.0
1897
+ */
1898
+ setReadOnly( Complex64Array.prototype, 'reduceRight', function reduceRight( reducer, initialValue ) {
1899
+ var buf;
1900
+ var acc;
1901
+ var len;
1902
+ var v;
1903
+ var i;
1904
+
1905
+ if ( !isComplexArray( this ) ) {
1906
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
1907
+ }
1908
+ if ( !isFunction( reducer ) ) {
1909
+ throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', reducer ) );
1910
+ }
1911
+ buf = this._buffer;
1912
+ len = this._length;
1913
+ if ( arguments.length > 1 ) {
1914
+ acc = initialValue;
1915
+ i = len-1;
1916
+ } else {
1917
+ if ( len === 0 ) {
1918
+ throw new Error( 'invalid operation. If not provided an initial value, an array must contain at least one element.' );
1919
+ }
1920
+ acc = getComplex64( buf, len-1 );
1921
+ i = len-2;
1922
+ }
1923
+ for ( ; i >= 0; i-- ) {
1924
+ v = getComplex64( buf, i );
1925
+ acc = reducer( acc, v, i, this );
1926
+ }
1927
+ return acc;
1928
+ });
1929
+
1702
1930
  /**
1703
1931
  * Reverses an array in-place.
1704
1932
  *
@@ -1709,8 +1937,8 @@ setReadOnly( Complex64Array.prototype, 'map', function map( fcn, thisArg ) {
1709
1937
  * @returns {Complex64Array} reversed array
1710
1938
  *
1711
1939
  * @example
1712
- * var realf = require( '@stdlib/complex-realf' );
1713
- * var imagf = require( '@stdlib/complex-imagf' );
1940
+ * var realf = require( '@stdlib/complex-float32-real' );
1941
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1714
1942
  *
1715
1943
  * var arr = new Complex64Array( 3 );
1716
1944
  *
@@ -1810,8 +2038,8 @@ setReadOnly( Complex64Array.prototype, 'reverse', function reverse() {
1810
2038
  * @returns {void}
1811
2039
  *
1812
2040
  * @example
1813
- * var realf = require( '@stdlib/complex-realf' );
1814
- * var imagf = require( '@stdlib/complex-imagf' );
2041
+ * var realf = require( '@stdlib/complex-float32-real' );
2042
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1815
2043
  *
1816
2044
  * var arr = new Complex64Array( 10 );
1817
2045
  *
@@ -1978,8 +2206,8 @@ setReadOnly( Complex64Array.prototype, 'set', function set( value ) {
1978
2206
  * @returns {Complex64Array} complex number array
1979
2207
  *
1980
2208
  * @example
1981
- * var realf = require( '@stdlib/complex-realf' );
1982
- * var imagf = require( '@stdlib/complex-imagf' );
2209
+ * var realf = require( '@stdlib/complex-float32-real' );
2210
+ * var imagf = require( '@stdlib/complex-float32-imag' );
1983
2211
  *
1984
2212
  * var arr = new Complex64Array( 5 );
1985
2213
  *
@@ -2107,8 +2335,8 @@ setReadOnly( Complex64Array.prototype, 'slice', function slice( start, end ) {
2107
2335
  * @returns {boolean} boolean indicating whether at least one element passes a test
2108
2336
  *
2109
2337
  * @example
2110
- * var realf = require( '@stdlib/complex-realf' );
2111
- * var imagf = require( '@stdlib/complex-imagf' );
2338
+ * var realf = require( '@stdlib/complex-float32-real' );
2339
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2112
2340
  *
2113
2341
  * function predicate( v ) {
2114
2342
  * return ( realf( v ) === imagf( v ) );
@@ -2141,6 +2369,108 @@ setReadOnly( Complex64Array.prototype, 'some', function some( predicate, thisArg
2141
2369
  return false;
2142
2370
  });
2143
2371
 
2372
+ /**
2373
+ * Sorts an array in-place.
2374
+ *
2375
+ * @name sort
2376
+ * @memberof Complex64Array.prototype
2377
+ * @type {Function}
2378
+ * @param {Function} compareFcn - comparison function
2379
+ * @throws {TypeError} `this` must be a complex number array
2380
+ * @throws {TypeError} first argument must be a function
2381
+ * @returns {Complex64Array} sorted array
2382
+ *
2383
+ * @example
2384
+ * var realf = require( '@stdlib/complex-float32-real' );
2385
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2386
+ *
2387
+ * function compare( a, b ) {
2388
+ * var re1;
2389
+ * var re2;
2390
+ * var im1;
2391
+ * var im2;
2392
+ * re1 = realf( a );
2393
+ * re2 = realf( b );
2394
+ * if ( re1 < re2 ) {
2395
+ * return -1;
2396
+ * }
2397
+ * if ( re1 > re2 ) {
2398
+ * return 1;
2399
+ * }
2400
+ * im1 = imagf( a );
2401
+ * im2 = imagf( b );
2402
+ * if ( im1 < im2 ) {
2403
+ * return -1;
2404
+ * }
2405
+ * if ( im1 > im2 ) {
2406
+ * return 1;
2407
+ * }
2408
+ * return 0;
2409
+ * }
2410
+ *
2411
+ * var arr = new Complex64Array( 3 );
2412
+ *
2413
+ * arr.set( [ 3.0, -3.0 ], 0 );
2414
+ * arr.set( [ 1.0, -1.0 ], 1 );
2415
+ * arr.set( [ 2.0, -2.0 ], 2 );
2416
+ *
2417
+ * var out = arr.sort( compare );
2418
+ * // returns <Complex64Array>
2419
+ *
2420
+ * var z = out.get( 0 );
2421
+ * // returns <Complex64>
2422
+ *
2423
+ * var re = realf( z );
2424
+ * // returns 1.0
2425
+ *
2426
+ * var im = imagf( z );
2427
+ * // returns -1.0
2428
+ *
2429
+ * z = out.get( 1 );
2430
+ * // returns <Complex64>
2431
+ *
2432
+ * re = realf( z );
2433
+ * // returns 2.0
2434
+ *
2435
+ * im = imagf( z );
2436
+ * // returns -2.0
2437
+ *
2438
+ * z = out.get( 2 );
2439
+ * // returns <Complex64>
2440
+ *
2441
+ * re = realf( z );
2442
+ * // returns 3.0
2443
+ *
2444
+ * im = imagf( z );
2445
+ * // returns -3.0
2446
+ */
2447
+ setReadOnly( Complex64Array.prototype, 'sort', function sort( compareFcn ) {
2448
+ var tmp;
2449
+ var buf;
2450
+ var len;
2451
+ var i;
2452
+ var j;
2453
+ if ( !isComplexArray( this ) ) {
2454
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
2455
+ }
2456
+ if ( !isFunction( compareFcn ) ) {
2457
+ throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', compareFcn ) );
2458
+ }
2459
+ buf = this._buffer;
2460
+ len = this._length;
2461
+ tmp = [];
2462
+ for ( i = 0; i < len; i++ ) {
2463
+ tmp.push( getComplex64( buf, i ) );
2464
+ }
2465
+ tmp.sort( compareFcn );
2466
+ for ( i = 0; i < len; i++ ) {
2467
+ j = 2 * i;
2468
+ buf[ j ] = realf( tmp[i] );
2469
+ buf[ j+1 ] = imagf( tmp[i] );
2470
+ }
2471
+ return this;
2472
+ });
2473
+
2144
2474
  /**
2145
2475
  * Creates a new typed array view over the same underlying `ArrayBuffer` and with the same underlying data type as the host array.
2146
2476
  *
@@ -2155,8 +2485,8 @@ setReadOnly( Complex64Array.prototype, 'some', function some( predicate, thisArg
2155
2485
  * @returns {Complex64Array} subarray
2156
2486
  *
2157
2487
  * @example
2158
- * var realf = require( '@stdlib/complex-realf' );
2159
- * var imagf = require( '@stdlib/complex-imagf' );
2488
+ * var realf = require( '@stdlib/complex-float32-real' );
2489
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2160
2490
  *
2161
2491
  * var arr = new Complex64Array( 5 );
2162
2492
  *
@@ -2265,6 +2595,59 @@ setReadOnly( Complex64Array.prototype, 'subarray', function subarray( begin, end
2265
2595
  return new this.constructor( buf.buffer, offset, ( len < 0 ) ? 0 : len );
2266
2596
  });
2267
2597
 
2598
+ /**
2599
+ * Serializes an array as a locale-specific string.
2600
+ *
2601
+ * @name toLocaleString
2602
+ * @memberof Complex64Array.prototype
2603
+ * @type {Function}
2604
+ * @param {(string|Array<string>)} [locales] - locale identifier(s)
2605
+ * @param {Object} [options] - configuration options
2606
+ * @throws {TypeError} `this` must be a complex number array
2607
+ * @throws {TypeError} first argument must be a string or an array of strings
2608
+ * @throws {TypeError} options argument must be an object
2609
+ * @returns {string} string representation
2610
+ *
2611
+ * @example
2612
+ * var arr = new Complex64Array( 2 );
2613
+ *
2614
+ * arr.set( [ 1.0, 1.0 ], 0 );
2615
+ * arr.set( [ 2.0, 2.0 ], 1 );
2616
+ *
2617
+ * var str = arr.toLocaleString();
2618
+ * // returns '1 + 1i,2 + 2i'
2619
+ */
2620
+ setReadOnly( Complex64Array.prototype, 'toLocaleString', function toLocaleString( locales, options ) {
2621
+ var opts;
2622
+ var loc;
2623
+ var out;
2624
+ var buf;
2625
+ var i;
2626
+ if ( !isComplexArray( this ) ) {
2627
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
2628
+ }
2629
+ if ( arguments.length === 0 ) {
2630
+ loc = [];
2631
+ } else if ( isString( locales ) || isStringArray( locales ) ) {
2632
+ loc = locales;
2633
+ } else {
2634
+ throw new TypeError( format( 'invalid argument. First argument must be a string or an array of strings. Value: `%s`.', locales ) );
2635
+ }
2636
+ if ( arguments.length < 2 ) {
2637
+ opts = {};
2638
+ } else if ( isObject( options ) ) {
2639
+ opts = options;
2640
+ } else {
2641
+ throw new TypeError( format( 'invalid argument. Options argument must be an object. Value: `%s`.', options ) );
2642
+ }
2643
+ buf = this._buffer;
2644
+ out = [];
2645
+ for ( i = 0; i < this._length; i++ ) {
2646
+ out.push( getComplex64( buf, i ).toLocaleString( loc, opts ) );
2647
+ }
2648
+ return out.join( ',' );
2649
+ });
2650
+
2268
2651
  /**
2269
2652
  * Returns a new typed array containing the elements in reversed order.
2270
2653
  *
@@ -2275,8 +2658,8 @@ setReadOnly( Complex64Array.prototype, 'subarray', function subarray( begin, end
2275
2658
  * @returns {Complex64Array} reversed array
2276
2659
  *
2277
2660
  * @example
2278
- * var realf = require( '@stdlib/complex-realf' );
2279
- * var imagf = require( '@stdlib/complex-imagf' );
2661
+ * var realf = require( '@stdlib/complex-float32-real' );
2662
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2280
2663
  *
2281
2664
  * var arr = new Complex64Array( 3 );
2282
2665
  *
@@ -2336,6 +2719,102 @@ setReadOnly( Complex64Array.prototype, 'toReversed', function toReversed() {
2336
2719
  return out;
2337
2720
  });
2338
2721
 
2722
+ /**
2723
+ * Returns a new typed array containing the elements in sorted order.
2724
+ *
2725
+ * @name toSorted
2726
+ * @memberof Complex64Array.prototype
2727
+ * @type {Function}
2728
+ * @param {Function} compareFcn - comparison function
2729
+ * @throws {TypeError} `this` must be a complex number array
2730
+ * @throws {TypeError} first argument must be a function
2731
+ * @returns {Complex64Array} sorted array
2732
+ *
2733
+ * @example
2734
+ * var realf = require( '@stdlib/complex-float32-real' );
2735
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2736
+ *
2737
+ * function compare( a, b ) {
2738
+ * var re1;
2739
+ * var re2;
2740
+ * var im1;
2741
+ * var im2;
2742
+ * re1 = realf( a );
2743
+ * re2 = realf( b );
2744
+ * if ( re1 < re2 ) {
2745
+ * return -1;
2746
+ * }
2747
+ * if ( re1 > re2 ) {
2748
+ * return 1;
2749
+ * }
2750
+ * im1 = imagf( a );
2751
+ * im2 = imagf( b );
2752
+ * if ( im1 < im2 ) {
2753
+ * return -1;
2754
+ * }
2755
+ * if ( im1 > im2 ) {
2756
+ * return 1;
2757
+ * }
2758
+ * return 0;
2759
+ * }
2760
+ *
2761
+ * var arr = new Complex64Array( 3 );
2762
+ *
2763
+ * arr.set( [ 3.0, -3.0 ], 0 );
2764
+ * arr.set( [ 1.0, -1.0 ], 1 );
2765
+ * arr.set( [ 2.0, -2.0 ], 2 );
2766
+ *
2767
+ * var out = arr.sort( compare );
2768
+ * // returns <Complex64Array>
2769
+ *
2770
+ * var z = out.get( 0 );
2771
+ * // returns <Complex64>
2772
+ *
2773
+ * var re = realf( z );
2774
+ * // returns 1.0
2775
+ *
2776
+ * var im = imagf( z );
2777
+ * // returns -1.0
2778
+ *
2779
+ * z = out.get( 1 );
2780
+ * // returns <Complex64>
2781
+ *
2782
+ * re = realf( z );
2783
+ * // returns 2.0
2784
+ *
2785
+ * im = imagf( z );
2786
+ * // returns -2.0
2787
+ *
2788
+ * z = out.get( 2 );
2789
+ * // returns <Complex64>
2790
+ *
2791
+ * re = realf( z );
2792
+ * // returns 3.0
2793
+ *
2794
+ * im = imagf( z );
2795
+ * // returns -3.0
2796
+ */
2797
+ setReadOnly( Complex64Array.prototype, 'toSorted', function toSorted( compareFcn ) {
2798
+ var tmp;
2799
+ var buf;
2800
+ var len;
2801
+ var i;
2802
+ if ( !isComplexArray( this ) ) {
2803
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
2804
+ }
2805
+ if ( !isFunction( compareFcn ) ) {
2806
+ throw new TypeError( format( 'invalid argument. First argument must be a function. Value: `%s`.', compareFcn ) );
2807
+ }
2808
+ buf = this._buffer;
2809
+ len = this._length;
2810
+ tmp = [];
2811
+ for ( i = 0; i < len; i++ ) {
2812
+ tmp.push( getComplex64( buf, i ) );
2813
+ }
2814
+ tmp.sort( compareFcn );
2815
+ return new Complex64Array( tmp );
2816
+ });
2817
+
2339
2818
  /**
2340
2819
  * Serializes an array as a string.
2341
2820
  *
@@ -2369,6 +2848,123 @@ setReadOnly( Complex64Array.prototype, 'toString', function toString() {
2369
2848
  return out.join( ',' );
2370
2849
  });
2371
2850
 
2851
+ /**
2852
+ * Returns an iterator for iterating over each value in a typed array.
2853
+ *
2854
+ * @name values
2855
+ * @memberof Complex64Array.prototype
2856
+ * @type {Function}
2857
+ * @throws {TypeError} `this` must be a complex number array
2858
+ * @returns {Iterator} iterator
2859
+ *
2860
+ * @example
2861
+ * var realf = require( '@stdlib/complex-float32-real' );
2862
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2863
+ * var arr = new Complex64Array( 2 );
2864
+ *
2865
+ * arr.set( [ 1.0, -1.0 ], 0 );
2866
+ * arr.set( [ 2.0, -2.0 ], 1 );
2867
+ *
2868
+ * var iter = arr.values();
2869
+ *
2870
+ * var v = iter.next().value;
2871
+ * // returns <Complex64>
2872
+ *
2873
+ * var re = realf( v );
2874
+ * // returns 1.0
2875
+ *
2876
+ * var im = imagf( v );
2877
+ * // returns -1.0
2878
+ *
2879
+ * v = iter.next().value;
2880
+ * // returns <Complex64>
2881
+ *
2882
+ * re = realf( v );
2883
+ * // returns 2.0
2884
+ *
2885
+ * im = imagf( v );
2886
+ * // returns -2.0
2887
+ *
2888
+ * var bool = iter.next().done;
2889
+ * // returns true
2890
+ */
2891
+ setReadOnly( Complex64Array.prototype, 'values', function values() {
2892
+ var iter;
2893
+ var self;
2894
+ var len;
2895
+ var FLG;
2896
+ var buf;
2897
+ var i;
2898
+ if ( !isComplexArray( this ) ) {
2899
+ throw new TypeError( 'invalid invocation. `this` is not a complex number array.' );
2900
+ }
2901
+ self = this;
2902
+ buf = this._buffer;
2903
+ len = this._length;
2904
+
2905
+ // Initialize an iteration index:
2906
+ i = -1;
2907
+
2908
+ // Create an iterator protocol-compliant object:
2909
+ iter = {};
2910
+ setReadOnly( iter, 'next', next );
2911
+ setReadOnly( iter, 'return', end );
2912
+
2913
+ if ( ITERATOR_SYMBOL ) {
2914
+ setReadOnly( iter, ITERATOR_SYMBOL, factory );
2915
+ }
2916
+ return iter;
2917
+
2918
+ /**
2919
+ * Returns an iterator protocol-compliant object containing the next iterated value.
2920
+ *
2921
+ * @private
2922
+ * @returns {Object} iterator protocol-compliant object
2923
+ */
2924
+ function next() {
2925
+ i += 1;
2926
+ if ( FLG || i >= len ) {
2927
+ return {
2928
+ 'done': true
2929
+ };
2930
+ }
2931
+ return {
2932
+ 'value': getComplex64( buf, i ),
2933
+ 'done': false
2934
+ };
2935
+ }
2936
+
2937
+ /**
2938
+ * Finishes an iterator.
2939
+ *
2940
+ * @private
2941
+ * @param {*} [value] - value to return
2942
+ * @returns {Object} iterator protocol-compliant object
2943
+ */
2944
+ function end( value ) {
2945
+ FLG = true;
2946
+ if ( arguments.length ) {
2947
+ return {
2948
+ 'value': value,
2949
+ 'done': true
2950
+ };
2951
+ }
2952
+ return {
2953
+ 'done': true
2954
+ };
2955
+ }
2956
+
2957
+ /**
2958
+ * Returns a new iterator.
2959
+ *
2960
+ * @private
2961
+ * @returns {Iterator} iterator
2962
+ */
2963
+ function factory() {
2964
+ return self.values();
2965
+ }
2966
+ });
2967
+
2372
2968
  /**
2373
2969
  * Returns a new typed array with the element at a provided index replaced with a provided value.
2374
2970
  *
@@ -2384,9 +2980,9 @@ setReadOnly( Complex64Array.prototype, 'toString', function toString() {
2384
2980
  * @returns {Complex64Array} new typed array
2385
2981
  *
2386
2982
  * @example
2387
- * var realf = require( '@stdlib/complex-realf' );
2388
- * var imagf = require( '@stdlib/complex-imagf' );
2389
- * var Complex64 = require( '@stdlib/complex-float32' );
2983
+ * var realf = require( '@stdlib/complex-float32-real' );
2984
+ * var imagf = require( '@stdlib/complex-float32-imag' );
2985
+ * var Complex64 = require( '@stdlib/complex-float32-ctor' );
2390
2986
  *
2391
2987
  * var arr = new Complex64Array( 3 );
2392
2988
  *