APIdia Launch Partner
Top Description Methods
java.lang.foreign

public sealed Interface SequenceLayout

extends MemoryLayout
permits SequenceLayoutImpl
Known Direct Implementers
jdk.internal.foreign.layout.SequenceLayoutImpl
Imports
jdk.internal.foreign.layout.SequenceLayoutImpl

A compound layout that denotes a homogeneous repetition of a given element layout. The repetition count is said to be the sequence layout's element count. A sequence layout can be thought of as a struct layout where the sequence layout's element layout is repeated a number of times that is equal to the sequence layout's element count. In other words this layout:
MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
is equivalent to the following layout:
MemoryLayout.structLayout( ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN), ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN), ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));
MemoryLayout.structLayout(
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN),
    ValueLayout.JAVA_INT.withOrder(ByteOrder.BIG_ENDIAN));

Implementation Specification

This class is immutable, thread-safe and value-based.

Since
22

Method Summary

Modifier and TypeMethod and Description
public long

Returns:

the element count of this sequence layout
elementCount
()

Returns the element count of this sequence layout.

public MemoryLayout

Returns:

the element layout of this sequence layout
elementLayout
()

Returns the element layout of this sequence layout.

public SequenceLayout

Returns:

a sequence layout with the same size as this layout (but, possibly, with different element count), whose element layout is not a sequence layout
flatten
()

Returns a flattened sequence layout.

public SequenceLayout

Returns:

a sequence layout where element layouts in the flattened projection of this sequence layout (see flatten()) are re-arranged into one or more nested sequence layouts
reshape
(long...
an array of element counts, of which at most one can be -1
elementCounts
)

Rearranges the elements in this sequence layout into a multidimensional sequence layout.

public SequenceLayout
withByteAlignment(long byteAlignment)

Redeclares java.lang.foreign.MemoryLayout.withByteAlignment.

Returns a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes).

public SequenceLayout

Returns:

a sequence layout with the same characteristics of this layout, but with the given element count
withElementCount
(long
the new element count
elementCount
)

Returns a sequence layout with the same characteristics of this layout, but with the given element count.

public SequenceLayout
withName(String name)

Redeclares java.lang.foreign.MemoryLayout.withName.

Returns a memory layout with the same characteristics as this layout, but with the given name.

public MemoryLayout
withoutName()

Redeclares java.lang.foreign.MemoryLayout.withoutName.

Returns a memory layout with the same characteristics as this layout, but with no name.

Inherited from java.lang.foreign.MemoryLayout:
arrayElementVarHandlebyteAlignmentbyteOffsetbyteOffsetHandlebyteSizeequalshashCodenamepaddingLayoutscalescaleHandleselectsequenceLayoutsliceHandlestructLayouttoStringunionLayoutvarHandle

Method Detail

elementCountback to summary
public long elementCount()

Returns the element count of this sequence layout.

Returns:long

the element count of this sequence layout

elementLayoutback to summary
public MemoryLayout elementLayout()

Returns the element layout of this sequence layout.

Returns:MemoryLayout

the element layout of this sequence layout

flattenback to summary
public SequenceLayout flatten()

Returns a flattened sequence layout. The element layout of the returned sequence layout is the first non-sequence layout found by inspecting (recursively, if needed) the element layout of this sequence layout:

MemoryLayout flatElementLayout(SequenceLayout sequenceLayout) { return switch (sequenceLayout.elementLayout()) { case SequenceLayout nestedSequenceLayout -> flatElementLayout(nestedSequenceLayout); case MemoryLayout layout -> layout; }; }
MemoryLayout flatElementLayout(SequenceLayout sequenceLayout) {
   return switch (sequenceLayout.elementLayout()) {
       case SequenceLayout nestedSequenceLayout -> flatElementLayout(nestedSequenceLayout);
       case MemoryLayout layout -> layout;
   };
}

This transformation preserves the layout size; nested sequence layout in this sequence layout will be dropped and their element counts will be incorporated into that of the returned sequence layout. For instance, given a sequence layout of the kind:

var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
calling seq.flatten() will yield the following sequence layout:
var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.JAVA_INT);
var flattenedSeq = MemoryLayout.sequenceLayout(12, ValueLayout.JAVA_INT);
Returns:SequenceLayout

a sequence layout with the same size as this layout (but, possibly, with different element count), whose element layout is not a sequence layout

reshapeback to summary
public SequenceLayout reshape(long... elementCounts)

Rearranges the elements in this sequence layout into a multidimensional sequence layout. The resulting layout is a sequence layout where element layouts in the flattened projection of this sequence layout are rearranged into one or more nested sequence layouts according to the provided element counts. This transformation preserves the layout size; that is, multiplying the provided element counts must yield the same element count as the flattened projection of this sequence layout.

For instance, given a sequence layout of the kind:

var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
var seq = MemoryLayout.sequenceLayout(4, MemoryLayout.sequenceLayout(3, ValueLayout.JAVA_INT));
calling seq.reshape(2, 6) will yield the following sequence layout:
var reshapeSeq = MemoryLayout.sequenceLayout(2, MemoryLayout.sequenceLayout(6, ValueLayout.JAVA_INT));
var reshapeSeq = MemoryLayout.sequenceLayout(2, MemoryLayout.sequenceLayout(6, ValueLayout.JAVA_INT));

If one of the provided element counts is the special value -1, then the element count in that position will be inferred from the remaining element counts and the element count of the flattened projection of this layout. For instance, a layout equivalent to the above reshapeSeq can also be computed in the following ways:

var reshapeSeqImplicit1 = seq.reshape(-1, 6); var reshapeSeqImplicit2 = seq.reshape(2, -1);
var reshapeSeqImplicit1 = seq.reshape(-1, 6);
var reshapeSeqImplicit2 = seq.reshape(2, -1);
Parameters
elementCounts:long[]

an array of element counts, of which at most one can be -1

Returns:SequenceLayout

a sequence layout where element layouts in the flattened projection of this sequence layout (see flatten()) are re-arranged into one or more nested sequence layouts

Exceptions
IllegalArgumentException:
if two or more element counts are set to -1, or if one or more element count is <= 0 (but other than -1) or, if, after any required inference, multiplying the element counts does not yield the same element count as the flattened projection of this sequence layout
withByteAlignmentback to summary
public SequenceLayout withByteAlignment(long byteAlignment)

Redeclares java.lang.foreign.MemoryLayout.withByteAlignment.

Doc from java.lang.foreign.MemoryLayout.withByteAlignment.

Returns a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes).

Exceptions
IllegalArgumentException:
  • if byteAlignment is not a power of two
  • if byteAlignment < elementLayout().byteAlignment()
withElementCountback to summary
public SequenceLayout withElementCount(long elementCount)

Returns a sequence layout with the same characteristics of this layout, but with the given element count.

Parameters
elementCount:long

the new element count

Returns:SequenceLayout

a sequence layout with the same characteristics of this layout, but with the given element count

Exceptions
IllegalArgumentException:
  • if elementCount is negative
  • if elementLayout.bitSize() * elementCount overflows
withNameback to summary
public SequenceLayout withName(String name)

Redeclares java.lang.foreign.MemoryLayout.withName.

Doc from java.lang.foreign.MemoryLayout.withName.

Returns a memory layout with the same characteristics as this layout, but with the given name.

Annotations
@Override
withoutNameback to summary
public MemoryLayout withoutName()

Redeclares java.lang.foreign.MemoryLayout.withoutName.

Doc from java.lang.foreign.MemoryLayout.withoutName.

Returns a memory layout with the same characteristics as this layout, but with no name.

Annotations
@Override