< prev index next >

test/micro/org/openjdk/bench/java/lang/foreign/pointers/NativeType.java

Print this page

23 
24 package org.openjdk.bench.java.lang.foreign.pointers;
25 
26 import java.lang.foreign.AddressLayout;
27 import java.lang.foreign.GroupLayout;
28 import java.lang.foreign.MemoryLayout;
29 import java.lang.foreign.ValueLayout;
30 
31 public sealed abstract class NativeType<X> {
32 
33     public abstract MemoryLayout layout();
34 
35     public non-sealed static abstract class OfInt<X> extends NativeType<X> {
36         public abstract ValueLayout.OfInt layout();
37     }
38     public non-sealed static abstract class OfDouble<X> extends NativeType<X> {
39         public abstract ValueLayout.OfDouble layout();
40     }
41 
42     private static final AddressLayout UNSAFE_ADDRESS = ValueLayout.ADDRESS
43             .withTargetLayout(MemoryLayout.sequenceLayout(ValueLayout.JAVA_BYTE));
44 
45     public final static class OfPointer<X> extends NativeType<X> {
46         public AddressLayout layout() {
47             return UNSAFE_ADDRESS;
48         }
49     }
50 
51     public non-sealed static abstract class OfStruct<X> extends NativeType<X> {
52         public abstract GroupLayout layout();
53         public abstract X make(Pointer<X> ptr);
54     }
55 
56     public static final OfInt<Integer> C_INT = new OfInt<>() {
57         @Override
58         public ValueLayout.OfInt layout() {
59             return ValueLayout.JAVA_INT;
60         }
61     };
62 
63     public static final OfDouble<Double> C_DOUBLE = new OfDouble<>() {

23 
24 package org.openjdk.bench.java.lang.foreign.pointers;
25 
26 import java.lang.foreign.AddressLayout;
27 import java.lang.foreign.GroupLayout;
28 import java.lang.foreign.MemoryLayout;
29 import java.lang.foreign.ValueLayout;
30 
31 public sealed abstract class NativeType<X> {
32 
33     public abstract MemoryLayout layout();
34 
35     public non-sealed static abstract class OfInt<X> extends NativeType<X> {
36         public abstract ValueLayout.OfInt layout();
37     }
38     public non-sealed static abstract class OfDouble<X> extends NativeType<X> {
39         public abstract ValueLayout.OfDouble layout();
40     }
41 
42     private static final AddressLayout UNSAFE_ADDRESS = ValueLayout.ADDRESS
43             .withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, ValueLayout.JAVA_BYTE));
44 
45     public final static class OfPointer<X> extends NativeType<X> {
46         public AddressLayout layout() {
47             return UNSAFE_ADDRESS;
48         }
49     }
50 
51     public non-sealed static abstract class OfStruct<X> extends NativeType<X> {
52         public abstract GroupLayout layout();
53         public abstract X make(Pointer<X> ptr);
54     }
55 
56     public static final OfInt<Integer> C_INT = new OfInt<>() {
57         @Override
58         public ValueLayout.OfInt layout() {
59             return ValueLayout.JAVA_INT;
60         }
61     };
62 
63     public static final OfDouble<Double> C_DOUBLE = new OfDouble<>() {
< prev index next >