accessorSetter
Return an accessor function for setting an element in an array-like object supporting the get/set protocol.
Usage
var accessorSetter = require( '@stdlib/array/base/accessor-setter' );
accessorSetter( dtype )
Returns an accessor function for setting an element in an array-like object supporting the get/set protocol.
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );
var realf = require( '@stdlib/complex/float32/real' );
var imagf = require( '@stdlib/complex/float32/imag' );
var arr = new Complex64Array( [ 1, 2, 3, 4 ] );
var set = accessorSetter( 'complex64' );
set( arr, 1, new Complex64( 10.0, 11.0 ) );
var v = arr.get( 1 );
// returns <Complex64>
var re = realf( v );
// returns 10.0
var im = imagf( v );
// returns 11.0
The returned accessor function accepts the following arguments:
- arr: input array.
- idx: element index.
- value: value to set.
Notes
- If provided an unsupported
dtype
, the function returns a default accessor function for accessing elements from any indexed array-like object supporting the get/set protocol; otherwise, the function returns an accessor function which should only be provided an array instance corresponding todtype
(e.g., ifdtype
is'complex64'
, the returned accessor function should only be provided instances ofComplex64Array
). - Accessor functions do not verify that provided input arrays are array instances corresponding to
dtype
, as doing so would introduce performance overhead. If array instances corresponding to other data types are provided to an accessor function, JavaScript runtimes will consider the function polymorphic, potentially triggering de-optimization. In order to ensure maximum performance, always ensure that an accessor function is monomorphic. - Accessor functions do not perform bounds checking.
- Accessor functions do not validate input values.
- Accessor functions do not verify that provided input arrays actually implement the get/set protocol.
- An array-like object supporting the get/set protocol is a data structure in which one accesses elements using explicit
get
andset
methods (e.g.,Complex64Array
andComplex128Array
).
Examples
var Complex128Array = require( '@stdlib/array/complex128' );
var Complex64Array = require( '@stdlib/array/complex64' );
var Complex128 = require( '@stdlib/complex/float64/ctor' );
var Complex64 = require( '@stdlib/complex/float32/ctor' );
var zeroTo = require( '@stdlib/array/base/zero-to' );
var dtype = require( '@stdlib/array/dtype' );
var accessorSetter = require( '@stdlib/array/base/accessor-setter' );
var arr = new Complex128Array( zeroTo( 10 ) );
accessorSetter( dtype( arr ) )( arr, 2, new Complex128( 100.0, 101.0 ) );
var v = arr.get( 2 );
// returns <Complex128>
console.log( '%s', v.toString() );
// => '100 + 101i'
arr = new Complex64Array( zeroTo( 10 ) );
accessorSetter( dtype( arr ) )( arr, 4, new Complex64( 102.0, 103.0 ) );
v = arr.get( 4 );
// returns <Complex64>
console.log( '%s', v.toString() );
// => '102 + 103i'