writeDataView
Copy elements from an input strided array to elements in a strided
DataView
.
Usage
var writeDataView = require( '@stdlib/strided/base/write-dataview' );
writeDataView( N, x, strideX, view, strideView, littleEndian )
Copies elements from an input strided array to elements in a strided DataView
.
var ArrayBuffer = require( '@stdlib/array/buffer' );
var DataView = require( '@stdlib/array/dataview' );
var x = [ 1.0, 2.0, 3.0, 4.0 ];
var buf = new ArrayBuffer( 32 );
var view = new DataView( buf );
var out = writeDataView( 4, x, 1, view, 8, true );
// returns <DataView>
var bool = ( out === view );
// returns true
var v = view.getFloat64( 0, true );
// returns 1.0
v = view.getFloat64( 8, true );
// returns 2.0
The function accepts the following arguments:
- N: number of indexed elements.
- x: input strided array.
- strideX: index increment for
x
. - view: output
DataView
. - strideView: index increment (in bytes) for
view
. - littleEndian: boolean indicating whether to store values in little-endian format.
The N
and stride parameters determine which elements in x
and view
are accessed at runtime. For example, to index every other value in x
and to index the first N
elements of view
in reverse order,
var ArrayBuffer = require( '@stdlib/array/buffer' );
var DataView = require( '@stdlib/array/dataview' );
var x = [ 1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 4.0, 0.0 ];
var buf = new ArrayBuffer( 64 );
var view = new DataView( buf );
var out = writeDataView( 4, x, 2, view, -8, true );
// returns <DataView>
var bool = ( out === view );
// returns true
var v = view.getFloat64( 0, true );
// returns 4.0
v = view.getFloat64( 8, true );
// returns 3.0
Note that indexing is relative to the first index. To introduce an offset, use typed array views.
var ArrayBuffer = require( '@stdlib/array/buffer' );
var DataView = require( '@stdlib/array/dataview' );
var Float32Array = require( '@stdlib/array/float32' );
// Initial array:
var x0 = new Float32Array( [ 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 ] );
// Create an offset view:
var x1 = new Float32Array( x0.buffer, x0.BYTES_PER_ELEMENT*1 ); // start at 2nd element
// Create an output DataView:
var buf = new ArrayBuffer( 64 );
var view = new DataView( buf );
var out = writeDataView( 4, x1, 1, view, 8, true );
// returns <DataView>
var bool = ( out === view );
// returns true
var v = view.getFloat32( 0, true );
// returns 2.0
v = view.getFloat32( 8, true );
// returns 3.0
writeDataView.ndarray( N, x, strideX, offsetX, view, strideView, offsetView, littleEndian )
Copies elements from an input strided array to elements in a strided DataView
using alternative indexing semantics.
var ArrayBuffer = require( '@stdlib/array/buffer' );
var DataView = require( '@stdlib/array/dataview' );
var x = [ 1.0, 2.0, 3.0, 4.0 ];
var buf = new ArrayBuffer( 32 );
var view = new DataView( buf );
var out = writeDataView.ndarray( 4, x, 1, 0, view, 8, 0, true );
// returns <DataView>
var bool = ( out === view );
// returns true
var v = view.getFloat64( 0, true );
// returns 1.0
The function accepts the following additional arguments:
- offsetX: starting index for
x
. - offsetView: starting index (in bytes) for
view
.
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 every other value in x
starting from the second value and to index the last N
elements in view
in reverse order,
var ArrayBuffer = require( '@stdlib/array/buffer' );
var DataView = require( '@stdlib/array/dataview' );
var x = [ 0.0, 1.0, 0.0, 2.0, 0.0, 3.0, 0.0, 4.0 ];
var buf = new ArrayBuffer( 64 );
var view = new DataView( buf );
var out = writeDataView.ndarray( 4, x, 2, 1, view, -8, 56, true );
// returns <DataView>
var bool = ( out === view );
// returns true
var v = view.getFloat64( 32, true );
// returns 4.0
v = view.getFloat64( 40, true );
// returns 3.0
Examples
var ArrayBuffer = require( '@stdlib/array/buffer' );
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 writeDataView = require( '@stdlib/strided/base/write-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 buf = new ArrayBuffer( x.length*nbytes );
var view = new DataView( buf );
// Copy the numbers to the DataView:
writeDataView( x.length, x, 1, view, nbytes, IS_LITTLE_ENDIAN );
// Create a view of the DataView:
var y = typedarray( view.buffer, dtype );
// Print the results:
logEach( '%d -> %d', x, y );