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;
|