2020
2121// MODULES //
2222
23- var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
24- var isNegativeZero = require ( '@stdlib/math/base/assert/is-negative-zero' ) ;
25-
23+ var isnan = require ( '@stdlib/math/base/assert/is-nan' ) ;
24+ var isNegativeZero = require ( '@stdlib/math/base/assert/is-negative-zero' ) ;
2625
2726// MAIN //
2827
2928/**
30- * Computes the minimum value of a strided array according to a mask
29+ * Computes the minimum value of a strided array according to a mask.
3130*
3231* @private
3332* @param {PositiveInteger } N - number of indexed elements
@@ -41,17 +40,16 @@ var isNegativeZero = require( '@stdlib/math/base/assert/is-negative-zero' );
4140* @param {Array<Function> } mask.accessors - mask element accessors
4241* @param {integer } strideMask - stride length for `mask`
4342* @param {NonNegativeInteger } offsetMask - starting index for `mask`
44- * @returns {Object } output minimum value
45- /*
46- * @example
47-
48- * var floor = require( '@stdlib/math/base/special/floor' );
43+ * @returns {number } Minimum value according to mask.
44+ *
45+ * @example
46+ * var floor = require('@stdlib/math/base/special/floor');
4947*
5048* var x = [ 2.0, 1.0, 2.0, -2.0, -2.0, 2.0, 3.0, 4.0, -5.0, -6.0 ];
5149* var mask = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1 ];
52- * var N = floor( x.length / 2 );
50+ * var N = floor(x.length / 2);
5351*
54- * var v = mskmax( 5, arraylike2object( toAccessorArray( x ) ), 2, 1, arraylike2object( toAccessorArray( mask ) ), 2, 1 );
52+ * var v = nanmskmin( 5, arraylike2object(toAccessorArray(x) ), 2, 1, arraylike2object(toAccessorArray(mask) ), 2, 1);
5553* // returns -2.0
5654*/
5755function nanmskmin ( N , x , strideX , offsetX , mask , strideMask , offsetMask ) {
@@ -66,65 +64,59 @@ function nanmskmin( N, x, strideX, offsetX, mask, strideMask, offsetMask ) {
6664 var i ;
6765
6866 // Cache references to array data:
69-
7067 xbuf = x . data ;
7168 mbuf = mask . data ;
7269
7370 // Cache references to element accessors:
74-
7571 xget = x . accessors [ 0 ] ;
7672 mget = mask . accessors [ 0 ] ;
7773
7874 if ( N <= 0 ) {
7975 return NaN ;
8076 }
81-
77+
8278 ix = offsetX ;
8379 im = offsetMask ;
84- for ( i = 0 ; i < N ; i ++ ) {
85- if ( mget ( mbuf , im ) === 0 ) {
80+
81+ for ( i = 0 ; i < N ; i ++ ) {
82+ if ( mget ( mbuf , im ) === 0 ) {
8683 break ;
8784 }
88-
8985 ix += strideX ;
9086 im += strideMask ;
91- }
92- if ( i === N ) {
93- return NaN
87+ }
88+
89+ if ( i === N ) {
90+ return NaN ;
91+ }
92+
93+ min = xget ( xbuf , ix ) ;
94+
95+ if ( isnan ( min ) ) {
96+ return NaN ;
97+ }
98+
99+ for ( i = i + 1 ; i < N ; i ++ ) {
100+ ix += strideX ;
101+ im += strideMask ;
102+
103+ if ( mget ( mbuf , im ) !== 0 ) {
104+ continue ;
94105 }
95-
96- min = xget ( xbuf , ix ) ;
97-
98- if ( isnan ( min ) ) {
99- return NaN ;
106+
107+ v = xget ( xbuf , ix ) ;
108+
109+ if ( isnan ( v ) ) {
110+ return v ;
100111 }
101-
102- i + 1 ;
103-
104- for ( i ; i < N ; i ++ ) {
105- ix += strideX ;
106- im += strideMask ;
107- if ( mget ( mbuf , im ) !== 0 ) {
108- continue ;
109- }
110-
111- v = xget ( xbuf , ix ) ;
112-
113- if ( isnan ( v ) ) {
114-
115- return v ;
116- }
117-
118- if ( v < min || ( v === min && isNegativeZero ( v ) ) ) {
119-
120- min = v ;
121- }
122-
112+
113+ if ( v < min || ( v === min && isNegativeZero ( v ) ) ) {
114+ min = v ;
123115 }
124- return min ;
116+ }
117+ return min ;
125118}
126119
127- //Exports
128-
120+ // EXPORTS //
129121
130122module . exports = nanmskmin ;
0 commit comments