function dispatcher( N, dtypeX, x, strideX, offsetX, dtypeY, y, strideY, offsetY, dtypeZ, z, strideZ, offsetZ ) { // eslint-disable-line max-params
		var viewX;
		var viewY;
		var viewZ;

		// WARNING: we assume that, if we're provided something resembling a typed array, we're provided a typed array; however, this can lead to potential unintended errors as the native add-on may not work with non-typed array objects (e.g., generic arrays)...
		if (
			!isTypedArrayLike( x ) ||
			!isTypedArrayLike( y ) ||
			!isTypedArrayLike( z )
		) {
			fallback( N, dtypeX, x, strideX, offsetX, dtypeY, y, strideY, offsetY, dtypeZ, z, strideZ, offsetZ );
			return z;
		}
		dtypeX = resolve( dtypeX );
		dtypeY = resolve( dtypeY );
		dtypeZ = resolve( dtypeZ );
		if ( dtypeX === null || dtypeY === null || dtypeZ === null ) {
			throw new TypeError( 'invalid arguments. Unable to resolve a strided array function supporting the provided array argument data types.' );
		}
		if ( !isNonNegativeInteger( offsetX ) ) {
			throw new TypeError( format( 'invalid argument. First input array offset must be a nonnegative integer. Value: `%s`.', offsetX ) );
		}
		if ( !isNonNegativeInteger( offsetY ) ) {
			throw new TypeError( format( 'invalid argument. Second input array offset must be a nonnegative integer. Value: `%s`.', offsetY ) );
		}
		if ( !isNonNegativeInteger( offsetZ ) ) {
			throw new TypeError( format( 'invalid argument. Output array offset must be a nonnegative integer. Value: `%s`.', offsetZ ) );
		}
		offsetX = minViewBufferIndex( N, strideX, offsetX );
		offsetY = minViewBufferIndex( N, strideY, offsetY );
		offsetZ = minViewBufferIndex( N, strideZ, offsetZ );
		if ( dtypeX === COMPLEX64 ) {
			viewX = reinterpretComplex64( x, offsetX );
		} else if ( dtypeX === COMPLEX128 ) {
			viewX = reinterpretComplex128( x, offsetX );
		} else if ( dtypeX === BOOLEAN ) {
			viewX = reinterpretBoolean( x, offsetX );
		} else {
			viewX = offsetView( x, offsetX );
		}
		if ( dtypeY === COMPLEX64 ) {
			viewY = reinterpretComplex64( y, offsetY );
		} else if ( dtypeY === COMPLEX128 ) {
			viewY = reinterpretComplex128( y, offsetY );
		} else if ( dtypeY === BOOLEAN ) {
			viewY = reinterpretBoolean( y, offsetY );
		} else {
			viewY = offsetView( y, offsetY );
		}
		if ( dtypeZ === COMPLEX64 ) {
			viewZ = reinterpretComplex64( z, offsetZ );
		} else if ( dtypeZ === COMPLEX128 ) {
			viewZ = reinterpretComplex128( z, offsetZ );
		} else if ( dtypeZ === BOOLEAN ) {
			viewZ = reinterpretBoolean( z, offsetZ );
		} else {
			viewZ = offsetView( z, offsetZ );
		}

		addon( N, dtypeX, viewX, strideX, dtypeY, viewY, strideY, dtypeZ, viewZ, strideZ );
		return z;
	}
Dispatches to a native add-on.

@private
@param {integer} N - number of indexed elements
@param {*} dtypeX - `x` data type
@param {Collection} x - input array
@param {integer} strideX - `x` stride length
@param {NonNegativeInteger} offsetX - starting `x` index
@param {*} dtypeY - `y` data type
@param {Collection} y - input array
@param {integer} strideY - `y` stride length
@param {NonNegativeInteger} offsetY - starting `y` index
@param {*} dtypeZ - `z` data type
@param {Collection} z - destination array
@param {integer} strideZ - `z` stride length
@param {NonNegativeInteger} offsetZ - starting `z` index
@throws {TypeError} fifth argument must be a nonnegative integer
@throws {TypeError} ninth argument must be a nonnegative integer
@throws {TypeError} thirteenth argument must be a nonnegative integer
@throws {TypeError} unable to resolve a strided array function supporting the provided array argument data types
@returns {Collection} `z`