< prev index next >

src/java.base/share/classes/jdk/internal/foreign/Utils.java

Print this page

 33 import jdk.incubator.foreign.ForeignLinker;
 34 import jdk.incubator.foreign.ValueLayout;
 35 import jdk.internal.access.foreign.MemoryAddressProxy;
 36 import jdk.internal.foreign.abi.SharedUtils;
 37 import jdk.internal.misc.VM;
 38 import sun.invoke.util.Wrapper;
 39 
 40 import java.lang.invoke.MethodHandle;
 41 import java.lang.invoke.MethodHandles;
 42 import java.lang.invoke.MethodType;
 43 import java.lang.invoke.VarHandle;
 44 import java.util.Optional;
 45 import java.util.function.Supplier;
 46 
 47 /**
 48  * This class contains misc helper functions to support creation of memory segments.
 49  */
 50 public final class Utils {
 51 
 52     private static final String foreignRestrictedAccess = Optional.ofNullable(VM.getSavedProperty("foreign.restricted"))
 53             .orElse("deny");
 54 
 55     private static final MethodHandle ADDRESS_FILTER;
 56 
 57     static {
 58         try {
 59             ADDRESS_FILTER = MethodHandles.lookup().findStatic(Utils.class, "filterAddress",
 60                     MethodType.methodType(MemoryAddressProxy.class, MemoryAddress.class));
 61         } catch (Throwable ex) {
 62             throw new ExceptionInInitializerError(ex);
 63         }
 64     }
 65 
 66     public static long alignUp(long n, long alignment) {
 67         return (n + alignment - 1) & -alignment;
 68     }
 69 
 70     public static MemoryAddress alignUp(MemoryAddress ma, long alignment) {
 71         long offset = ma.toRawLongValue();
 72         return ma.addOffset(alignUp(offset, alignment) - offset);
 73     }

 33 import jdk.incubator.foreign.ForeignLinker;
 34 import jdk.incubator.foreign.ValueLayout;
 35 import jdk.internal.access.foreign.MemoryAddressProxy;
 36 import jdk.internal.foreign.abi.SharedUtils;
 37 import jdk.internal.misc.VM;
 38 import sun.invoke.util.Wrapper;
 39 
 40 import java.lang.invoke.MethodHandle;
 41 import java.lang.invoke.MethodHandles;
 42 import java.lang.invoke.MethodType;
 43 import java.lang.invoke.VarHandle;
 44 import java.util.Optional;
 45 import java.util.function.Supplier;
 46 
 47 /**
 48  * This class contains misc helper functions to support creation of memory segments.
 49  */
 50 public final class Utils {
 51 
 52     private static final String foreignRestrictedAccess = Optional.ofNullable(VM.getSavedProperty("foreign.restricted"))
 53             .orElse("permit");
 54 
 55     private static final MethodHandle ADDRESS_FILTER;
 56 
 57     static {
 58         try {
 59             ADDRESS_FILTER = MethodHandles.lookup().findStatic(Utils.class, "filterAddress",
 60                     MethodType.methodType(MemoryAddressProxy.class, MemoryAddress.class));
 61         } catch (Throwable ex) {
 62             throw new ExceptionInInitializerError(ex);
 63         }
 64     }
 65 
 66     public static long alignUp(long n, long alignment) {
 67         return (n + alignment - 1) & -alignment;
 68     }
 69 
 70     public static MemoryAddress alignUp(MemoryAddress ma, long alignment) {
 71         long offset = ma.toRawLongValue();
 72         return ma.addOffset(alignUp(offset, alignment) - offset);
 73     }
< prev index next >