Main Content

coder.isRowMajor

Determine whether the current function or variable uses row-major layout

Description

example

coder.isRowMajor resolves as true in the generated code if the current function uses row-major array layout. Use the function as the expression in control flow (if, else, switch) statements.

example

coder.isRowMajor(arg) resolves as true if the current variable uses row-major array layout.

Examples

collapse all

To query the array layout of a function at compile time, use coder.isRowMajor or coder.isColumnMajor. This query can be useful for specializing your generated code when it involves row-major and column-major functions. For example, consider this function:

function S = addMatrixRouted(A,B)
 if coder.isRowMajor
     %execute this code if row major
     S = addMatrix_OptimizedForRowMajor(A,B); 
 elseif coder.isColumnMajor
     %execute this code if column major
     S = addMatrix_OptimizedForColumnMajor(A,B);
 end

The function addMatrixRouted behaves differently depending on whether it uses row-major layout or column-major layout. The layout that the function uses, for example, can depend on whether it is called from a function that contains coder.rowMajor or coder.columnMajor. When addMatrixRouted uses row-major layout, it calls the addMatrix_OptimizedForRowMajor function, which has efficient memory access for row-major data. When the function uses column-major layout, it calls a version of the addMatrix function optimized for column-major data.

By using the query functions, the generated code for addMatrixRouted provides efficient memory access for either choice of array layout.

Consider the function foo:

function foo
coder.rowMajor;
x = magic(3);
if coder.isRowMajor(x)
    fprintf('This will always be displayed in generated code.\n');
else
    fprintf('This will never be displayed in generated code.\n');
end
end

Generate code:

codegen foo

To run the MEX function, enter:

foo_mex

Input Arguments

collapse all

Variable to query for array layout.

Example: coder.isRowMajor(x);

Limitations

  • You cannot query the array layout of a structure field or property.

Tips

  • Outside of code generation and simulation, coder.isRowMajor is always false.

  • If coder.isRowMajor always resolves to true for your code, other branches in the if statement are ignored by the code generator. Otherwise, one instance of the current function is created for each array layout.

Introduced in R2018a