29package com.jogamp.opencl;
31import java.lang.reflect.Field;
32import java.nio.Buffer;
33import sun.misc.Unsafe;
39class InternalBufferUtil {
41 private static final long addressFieldOffset;
42 private static Unsafe unsafe;
46 final Field f = Buffer.class.getDeclaredField(
"address");
48 final Field[] fields = Unsafe.class.getDeclaredFields();
49 for (
int i = 0; i < fields.length; i++) {
50 if (fields[i].getName().equals(
"theUnsafe")) {
51 fields[i].setAccessible(
true);
52 unsafe = (Unsafe)fields[i].
get(Unsafe.class);
57 addressFieldOffset = unsafe.objectFieldOffset(f);
58 }
catch (
final Exception e) {
59 throw new RuntimeException(e);
63 public static long getDirectBufferAddress(
final Buffer buffer) {
64 return ((buffer ==
null) ? 0 : unsafe.getLong(buffer, addressFieldOffset));