Skip to content

Commit 6ad9308

Browse files
committed
Update type and use logic to internal functions for IC
1 parent cd704df commit 6ad9308

File tree

2 files changed

+54
-24
lines changed

2 files changed

+54
-24
lines changed

lib/node_modules/@stdlib/array/filled/docs/repl.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
value: any
9898
Fill value.
9999

100-
iterable: Object
100+
iterable: Iterable
101101
Iterable from which to generate an array.
102102

103103
dtype: string (optional)

lib/node_modules/@stdlib/array/filled/lib/main.js

Lines changed: 53 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,66 @@ var ITERATOR_SYMBOL = require( '@stdlib/symbol/iterator' );
3838
var HAS_ITERATOR_SYMBOL = hasIteratorSymbolSupport();
3939

4040

41+
// FUNCTIONS //
42+
43+
/**
44+
* Creates a filled "generic" array.
45+
*
46+
* @private
47+
* @param {NonNegativeInteger} len - array length
48+
* @param {*} value - fill value
49+
* @returns {Array} filled array
50+
*/
51+
function filled( len, value ) {
52+
var arr;
53+
var i;
54+
55+
// Manually push elements in order to ensure "fast" elements...
56+
arr = [];
57+
for ( i = 0; i < len; i++ ) {
58+
arr.push( value );
59+
}
60+
return arr;
61+
}
62+
63+
/**
64+
* Creates a filled "generic" array from an iterator.
65+
*
66+
* @private
67+
* @param {Iterator} it - iterator
68+
* @param {*} value - fill value
69+
* @returns {Array} filled array
70+
*/
71+
function filledIterator( it, value ) {
72+
var arr;
73+
var v;
74+
75+
arr = [];
76+
while ( true ) {
77+
v = it.next();
78+
if ( hasOwnProp( v, 'value' ) ) {
79+
arr.push( value );
80+
}
81+
if ( v.done ) {
82+
break;
83+
}
84+
}
85+
return arr;
86+
}
87+
88+
4189
// MAIN //
4290

4391
/**
4492
* Creates a filled array.
4593
*
4694
* @param {*} [value] - fill value
47-
* @param {(NonNegativeInteger|TypedArray|ArrayLikeObject|ArrayBuffer)} [arg] - a length, typed array, array-like object, or buffer
95+
* @param {(NonNegativeInteger|TypedArray|ArrayLikeObject|ArrayBuffer|Iterable)} [arg] - a length, typed array, array-like object, buffer, or iterable
4896
* @param {NonNegativeInteger} [byteOffset=0] - byte offset
4997
* @param {NonNegativeInteger} [length] - view length
5098
* @param {string} [dtype="float64"] - data type
5199
* @throws {TypeError} must provide a recognized data type
52-
* @throws {TypeError} must provide a length, typed array, array-like object, or buffer
100+
* @throws {TypeError} must provide a length, typed array, array-like object, buffer, or iterable
53101
* @throws {Error} creating a generic array from an `ArrayBuffer` is not supported
54102
* @returns {(TypedArray|Array)} array or typed array
55103
*
@@ -137,8 +185,6 @@ function filledarray() {
137185
var arr;
138186
var len;
139187
var arg;
140-
var v;
141-
var i;
142188

143189
nargs = arguments.length;
144190
nargs -= 1;
@@ -165,13 +211,7 @@ function filledarray() {
165211
len = arg.length;
166212
}
167213
if ( len !== void 0 ) {
168-
arr = [];
169-
170-
// Manually push elements in order to ensure "fast" elements...
171-
for ( i = 0; i < len; i++ ) {
172-
arr.push( value );
173-
}
174-
return arr;
214+
return filled( len, value );
175215
}
176216
if ( isArrayBuffer( arg ) ) {
177217
throw new Error( 'invalid arguments. Creating a generic array from an ArrayBuffer is not supported.' );
@@ -187,17 +227,7 @@ function filledarray() {
187227
if ( !isFunction( arg.next ) ) {
188228
throw new TypeError( 'invalid argument. Must provide a length, typed array, array-like object, or an iterable.' );
189229
}
190-
arr = [];
191-
while ( true ) {
192-
v = arg.next();
193-
if ( hasOwnProp( v, 'value' ) ) {
194-
arr.push( value );
195-
}
196-
if ( v.done ) {
197-
break;
198-
}
199-
}
200-
return arr;
230+
return filledIterator( arg, value );
201231
}
202232
throw new TypeError( 'invalid argument. Must provide a length, typed array, array-like object, or an iterable. Value: `'+arg+'`.' );
203233
} else if ( isArrayBuffer( arg ) ) {
@@ -216,7 +246,7 @@ function filledarray() {
216246
arr = new ctor( arguments[1], arguments[2], arguments[3] );
217247
}
218248
value = arguments[ 0 ];
219-
if ( arr.length > 0 && value !== 0 ) { // i.e., nonzero
249+
if ( arr.length > 0 && value !== 0 ) { // we only need to fill a typed array if the fill value isn't zero, as typed arrays are always zero-initialized
220250
gfill( arr.length, value, arr, 1 );
221251
}
222252
return arr;

0 commit comments

Comments
 (0)