# Interface UnionLayout

All Superinterfaces:
  `GroupLayout, MemoryLayout`

public sealed interface UnionLayout extends GroupLayout
A group layout whose member layouts are laid out at the same starting offset.

Implementation Requirements:
  Implementing classes are immutable, thread-safe and value-based.
Since:
  22

## Nested Class Summary

### Nested classes/interfaces declared in interface MemoryLayout

`MemoryLayout.PathElement`
Modifier and Type
Interface
Description
`static interface`
`MemoryLayout.PathElement`
An element in a layout path.

## Method Summary

Modifier and Type
Method
Description
`UnionLayout`
`withByteAlignment(long byteAlignment)`
Returns a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes).
`UnionLayout`
`withName(String name)`
Returns a memory layout with the same characteristics as this layout, but with the given name.
`UnionLayout`
`withoutName()`
Returns a memory layout with the same characteristics as this layout, but with no name.

### Methods declared in interface GroupLayout

`memberLayouts`
Modifier and Type
Method
Description
`List<MemoryLayout>`
`memberLayouts()`
Returns the member layouts of this group layout.

### Methods declared in interface MemoryLayout

`arrayElementVarHandle, byteAlignment, byteOffset, byteOffsetHandle, byteSize, equals, hashCode, name, scale, scaleHandle, select, sliceHandle, toString, varHandle`
Modifier and Type
Method
Description
`VarHandle`
`arrayElementVarHandle(MemoryLayout.PathElement... elements)`
Creates a var handle that accesses adjacent elements in a memory segment at offsets selected by the given layout path, where the accessed elements have this layout, and where the initial layout in the path is this layout.
`long`
`byteAlignment()`
Returns the alignment constraint associated with this layout, expressed in bytes.
`long`
`byteOffset(MemoryLayout.PathElement... elements)`
Computes the offset, in bytes, of the layout selected by the given layout path, where the initial layout in the path is this layout.
`MethodHandle`
`byteOffsetHandle(MemoryLayout.PathElement... elements)`
Creates a method handle that computes the offset, in bytes, of the layout selected by the given layout path, where the initial layout in the path is this layout.
`long`
`byteSize()`
Returns the layout size, in bytes.
`boolean`
`equals(Object other)`
Compares the specified object with this layout for equality.
`int`
`hashCode()`
Returns the hash code value for this layout.
`Optional<String>`
`name()`
Returns the name (if any) associated with this layout.
`long`
`scale(long offset, long index)`
Returns `offset + (byteSize() * index)`.
`MethodHandle`
`scaleHandle()`
Returns a method handle that can be used to invoke `MemoryLayout.scale(long, long)` on this layout.
`MemoryLayout`
`select(MemoryLayout.PathElement... elements)`
Returns the layout selected from the provided path, where the initial layout in the path is this layout.
`MethodHandle`
`sliceHandle(MemoryLayout.PathElement... elements)`
Creates a method handle which, given a memory segment, returns a slice corresponding to the layout selected by the given layout path, where the initial layout in the path is this layout.
`String`
`toString()`
Returns the string representation of this layout.
`VarHandle`
`varHandle(MemoryLayout.PathElement... elements)`
Creates a var handle that accesses a memory segment at the offset selected by the given layout path, where the initial layout in the path is this layout.

## Method Details

### withName

UnionLayout withName(String name)
Returns a memory layout with the same characteristics as this layout, but with the given name.

Specified by:
  `withName` in interface `GroupLayout`
Specified by:
  `withName` in interface `MemoryLayout`
Parameters:
  `name` - the layout name
Returns:
  a memory layout with the same characteristics as this layout, but with the given name
See Also:
  - `MemoryLayout.name()`

### withoutName

UnionLayout withoutName()
Returns a memory layout with the same characteristics as this layout, but with no name.

Specified by:
  `withoutName` in interface `GroupLayout`
Specified by:
  `withoutName` in interface `MemoryLayout`
Returns:
  a memory layout with the same characteristics as this layout, but with no name
See Also:
  - `MemoryLayout.name()`

### withByteAlignment

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

Specified by:
  `withByteAlignment` in interface `GroupLayout`
Specified by:
  `withByteAlignment` in interface `MemoryLayout`
Parameters:
  `byteAlignment` - the layout alignment constraint, expressed in bytes
Returns:
  a memory layout with the same characteristics as this layout, but with the given alignment constraint (in bytes)
Throws:
  `IllegalArgumentException` - if `byteAlignment` is not a power of two
  `IllegalArgumentException` - if `byteAlignment` is less than `M`, where `M` is the maximum alignment constraint in any of the member layouts associated with this group layout