Return a constructor for creating arrays having a fixed-width composite data type.
var structFactory = require( '@stdlib/array/struct-factory' );Returns a constructor for creating arrays having a fixed-width composite data type.
var schema = [
{
'name': 'beep',
'type': 'float64'
},
{
'name': 'boop',
'type': 'int32'
}
];
var StructArray = structFactory( schema );
// returns <Function>The function supports the following parameters:
TODO: add documentation of constructor
Number of bytes per view element.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var nbytes = StructArray.BYTES_PER_ELEMENT;
// returns 1Array constructor name.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var str = StructArray.name;
// returns 'StructArray'Read-only property which returns the ArrayBuffer referenced by the array.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var arr = new StructArray( 5 );
var buf = arr.buffer;
// returns <ArrayBuffer>Read-only property which returns the length (in bytes) of the array.
var schema = [
{
'name': 'foo',
'type': 'int32'
}
];
var StructArray = structFactory( schema );
var arr = new StructArray( 5 );
var byteLength = arr.byteLength;
// returns 20Read-only property which returns the offset (in bytes) of the array from the start of its ArrayBuffer.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var arr = new StructArray( 5 );
var byteOffset = arr.byteOffset;
// returns 0Number of bytes per view element.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var arr = new StructArray( 5 );
var nbytes = arr.BYTES_PER_ELEMENT;
// returns 1Read-only property which returns the number of view elements.
var schema = [
{
'name': 'foo',
'type': 'bool'
}
];
var StructArray = structFactory( schema );
var arr = new StructArray( 5 );
var len = arr.length;
// returns 5TODO: document methods
-
While returned constructors strive to maintain (but do not guarantee) consistency with typed arrays, significant deviations from ECMAScript-defined typed array behavior are as follows:
- Constructors do not require the
newoperator. - Accessing array elements using bracket syntax (e.g.,
X[i]) is not supported. Instead, one must use the.get()method. - Accessed array elements are a view on underlying memory. Thus, mutation of accessed elements mutates the underlying buffer.
- Constructors do not require the
-
Struct arrays share several similarities with generic arrays containing objects (e.g., nested property access); however, the principal difference is that struct arrays are strongly typed and backed by fixed memory. Struct arrays are particularly well-suited for zero-copy transfer of data stored in composite data types when interoperating between JavaScript and C.
var factory = require( '@stdlib/array/struct-factory' );
// Define a schema for a composite data type for storing a student's test scores:
var schema = [
{
'name': 'test_number',
'type': 'int16'
},
{
'name': 'pass',
'type': 'bool'
},
{
'name': 'correct',
'type': 'int32'
},
{
'name': 'incorrect',
'type': 'int32'
},
{
'name': 'percentage',
'type': 'float32'
}
];
// Create an array constructor for creating composite data type arrays:
var TestScoreArray = factory( schema );
console.log( 'Layout: %s', TestScoreArray.struct.layout );
// Create a new array for storing test scores:
var student1 = new TestScoreArray( 10 );
console.log( 'Byte length: %d', student1.byteLength );