readDataView
Copy elements from an input strided
DataView
to elements in an output strided array.
Usage
var readDataView = require( '@stdlib/strided/base/read-dataview' );
readDataView( N, view, strideView, out, strideOut, littleEndian )
Copies elements from an input strided DataView
to elements in an output strided array.
var Float64Array = require( '@stdlib/array/float64' );
var DataView = require( '@stdlib/array/dataview' );
var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
var view = new DataView( x.buffer );
var y = new Float64Array( x.length );
var out = readDataView( x.length, view, 8, y, 1, true );
// e.g., returns <Float64Array>[ 1.0, 2.0, 3.0, 4.0 ]
var bool = ( out === y );
// returns true
The function accepts the following arguments:
- N: number of indexed elements.
- view: input
DataView
. - strideView: index increment (in bytes) for
view
. - out: output strided array.
- strideOut: index increment for
out
. - littleEndian: boolean indicating whether to store values in little-endian format.
The N
and stride parameters determine which elements in view
and out
are accessed at runtime. For example, to index the first N
elements of view
in reverse order and to index every other value in out
,
var Float64Array = require( '@stdlib/array/float64' );
var DataView = require( '@stdlib/array/dataview' );
var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
var view = new DataView( x.buffer );
var y = new Float64Array( x.length*2 );
var out = readDataView( x.length, view, -8, y, 2, true );
// e.g., returns <Float64Array>[ 4.0, 0.0, 3.0, 0.0, 2.0, 0.0, 1.0, 0.0 ]
var bool = ( out === y );
// returns true
Note that indexing is relative to the first index. To introduce an offset, use typed array views.
var Float64Array = require( '@stdlib/array/float64' );
var DataView = require( '@stdlib/array/dataview' );
var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
var view = new DataView( x.buffer );
// Initial output array:
var y0 = new Float64Array( x.length+1 );
// Create an offset view:
var y1 = new Float64Array( y0.buffer, y0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
var out = readDataView( x.length, view, 8, y1, 1, true );
// e.g., returns <Float64Array>[ 1.0, 2.0, 3.0, 4.0 ]
var bool = ( out === y1 );
// returns true
readDataView.ndarray( N, view, strideView, offsetView, out, strideOut, offsetOut, littleEndian )
Copies elements from an input strided DataView
to elements in an output strided array using alternative indexing semantics.
var Float64Array = require( '@stdlib/array/float64' );
var DataView = require( '@stdlib/array/dataview' );
var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
var view = new DataView( x.buffer );
var y = new Float64Array( x.length );
var out = readDataView.ndarray( x.length, view, 8, 0, y, 1, 0, true );
// e.g., returns <Float64Array>[ 1.0, 2.0, 3.0, 4.0 ]
var bool = ( out === y );
// returns true
The function accepts the following additional arguments:
- offsetView: starting index (in bytes) for
view
. - offsetOut: starting index for
out
.
While typed array views mandate a view offset based on the underlying buffer, the offset parameters support indexing semantics based on starting indices. For example, to index the last N
elements in view
in reverse order and to index every other value in out
starting from the second value,
var Float64Array = require( '@stdlib/array/float64' );
var DataView = require( '@stdlib/array/dataview' );
var x = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] );
var view = new DataView( x.buffer );
var y = new Float64Array( x.length*2 );
var out = readDataView.ndarray( x.length, view, -8, 24, y, 2, 1, true );
// e.g., returns <Float64Array>[ 0.0, 4.0, 0.0, 3.0, 0.0, 2.0, 0.0, 1.0 ]
var bool = ( out === y );
// returns true
Examples
var DataView = require( '@stdlib/array/dataview' );
var typedarray = require( '@stdlib/array/typed' );
var bytesPerElement = require( '@stdlib/ndarray/base/bytes-per-element' );
var discreteUniform = require( '@stdlib/random/array/discrete-uniform' );
var IS_LITTLE_ENDIAN = require( '@stdlib/assert/is-little-endian' );
var logEach = require( '@stdlib/console/log-each' );
var readDataView = require( '@stdlib/strided/base/read-dataview' );
// Specify the array data type:
var dtype = 'float64';
// Resolve the number of bytes per element:
var nbytes = bytesPerElement( dtype );
// Generate an array of random numbers:
var x = discreteUniform( 10, 0, 100, {
'dtype': dtype
});
// Create a DataView:
var view = new DataView( x.buffer );
// Create an output array:
var out = typedarray( x.length, dtype );
// Read elements from the DataView according to host byte order:
readDataView( out.length, view, nbytes, out, 1, IS_LITTLE_ENDIAN );
// Print the results:
logEach( '%d -> %d', x, out );
// Read elements from the DataView according to the opposite byte order:
readDataView( out.length, view, nbytes, out, 1, !IS_LITTLE_ENDIAN );
// Print the results:
logEach( '%d -> %d', x, out );