isContiguous

Determine if an array is contiguous.

An array is contiguous if the memory address of each array element is adjacent to the memory address of the next array element.

Usage

var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );

isContiguous( shape, strides, offset )

Returns a boolean indicating if an array is contiguous.

var shape = [ 2, 2 ];
var strides = [ 2, 1 ];
var offset = 25;

var bool = isContiguous( shape, strides, offset );
// returns true

shape = [ 10 ];
strides = [ 3 ]; // every third memory element
offset = 0;

bool = isContiguous( shape, strides, offset );
// returns false

Examples

var discreteUniform = require( '@stdlib/random/base/discrete-uniform' );
var shape2strides = require( '@stdlib/ndarray/base/shape2strides' );
var strides2offset = require( '@stdlib/ndarray/base/strides2offset' );
var randu = require( '@stdlib/random/base/randu' );
var isContiguous = require( '@stdlib/ndarray/base/assert/is-contiguous' );

var strides;
var offset;
var shape;
var bool;
var i;
var j;

shape = new Array( 3 );

for ( i = 0; i < 100; i++ ) {
    // Generate a random array shape:
    shape[ 0 ] = discreteUniform( 1, 10 );
    shape[ 1 ] = discreteUniform( 1, 10 );
    shape[ 2 ] = discreteUniform( 1, 10 );

    // Generate strides:
    if ( randu() < 0.5 ) {
        strides = shape2strides( shape, 'row-major' );
    } else {
        strides = shape2strides( shape, 'column-major' );
    }
    j = discreteUniform( 0, shape.length-1 );
    strides[ j ] *= ( randu() < 0.5 ) ? -1 : 1;

    strides[ 0 ] *= discreteUniform( 1, 2 ); // if scaled by 1, then single segment

    // Compute the index offset:
    offset = strides2offset( shape, strides ) + 25; // include a view offset

    // Determine if the array is contiguous:
    bool = isContiguous( shape, strides, offset );
    console.log( 'Shape: %s. Strides: %s. Offset: %d. Contiguous: %s.', shape.join( 'x' ), strides.join( ',' ), offset, bool );
}