< prev index next >

src/java.base/share/classes/jdk/internal/foreign/layout/AbstractLayout.java

Print this page

 36 import java.util.Objects;
 37 import java.util.Optional;
 38 
 39 public abstract sealed class AbstractLayout<L extends AbstractLayout<L> & MemoryLayout>
 40         permits AbstractGroupLayout, PaddingLayoutImpl, SequenceLayoutImpl, ValueLayouts.AbstractValueLayout {
 41 
 42     private final long byteSize;
 43     private final long byteAlignment;
 44     private final Optional<String> name;
 45 
 46     AbstractLayout(long byteSize, long byteAlignment, Optional<String> name) {
 47         this.byteSize = MemoryLayoutUtil.requireByteSizeValid(byteSize, true);
 48         this.byteAlignment = requirePowerOfTwoAndGreaterOrEqualToOne(byteAlignment);
 49         this.name = Objects.requireNonNull(name);
 50     }
 51 
 52     public final L withName(String name) {
 53         return dup(byteAlignment(), Optional.of(name));
 54     }
 55 

 56     public final L withoutName() {
 57         return dup(byteAlignment(), Optional.empty());
 58     }
 59 
 60     public final Optional<String> name() {
 61         return name;
 62     }
 63 
 64     public L withByteAlignment(long byteAlignment) {
 65         return dup(byteAlignment, name);
 66     }
 67 
 68     public final long byteAlignment() {
 69         return byteAlignment;
 70     }
 71 
 72     public final long byteSize() {
 73         return byteSize;
 74     }
 75 
 76     public boolean hasNaturalAlignment() {
 77         return byteSize == byteAlignment;

 36 import java.util.Objects;
 37 import java.util.Optional;
 38 
 39 public abstract sealed class AbstractLayout<L extends AbstractLayout<L> & MemoryLayout>
 40         permits AbstractGroupLayout, PaddingLayoutImpl, SequenceLayoutImpl, ValueLayouts.AbstractValueLayout {
 41 
 42     private final long byteSize;
 43     private final long byteAlignment;
 44     private final Optional<String> name;
 45 
 46     AbstractLayout(long byteSize, long byteAlignment, Optional<String> name) {
 47         this.byteSize = MemoryLayoutUtil.requireByteSizeValid(byteSize, true);
 48         this.byteAlignment = requirePowerOfTwoAndGreaterOrEqualToOne(byteAlignment);
 49         this.name = Objects.requireNonNull(name);
 50     }
 51 
 52     public final L withName(String name) {
 53         return dup(byteAlignment(), Optional.of(name));
 54     }
 55 
 56     @SuppressWarnings("unchecked")
 57     public final L withoutName() {
 58         return name.isPresent() ? dup(byteAlignment(), Optional.empty()) : (L) this;
 59     }
 60 
 61     public final Optional<String> name() {
 62         return name;
 63     }
 64 
 65     public L withByteAlignment(long byteAlignment) {
 66         return dup(byteAlignment, name);
 67     }
 68 
 69     public final long byteAlignment() {
 70         return byteAlignment;
 71     }
 72 
 73     public final long byteSize() {
 74         return byteSize;
 75     }
 76 
 77     public boolean hasNaturalAlignment() {
 78         return byteSize == byteAlignment;
< prev index next >