Package jnr.ffi
Class ObjectReferenceManager<T>
- java.lang.Object
-
- jnr.ffi.ObjectReferenceManager<T>
-
- Direct Known Subclasses:
DefaultObjectReferenceManager
public abstract class ObjectReferenceManager<T> extends java.lang.Object
Provides a mapping between java objects and unique native addresses.The native addresses generated by this class do not relate to the object's true native address (since that is not supported by most java virtual machines), but is guaranteed to be unique within an ObjectReferenceManager instance.
This would be commonly used to create a unique native pointer that can be used to retrieve an object from within a callback. e.g.
public interface MyLib { public static interface MyCallback { @Delegate public void call(Pointer value); } public void do_something_with_callback(MyCallback cb, Pointer cb_argument); } MyLib lib = LibraryLoader.create(MyLib.class).load("mylib"); final ObjectReferenceManager referenceManager = Runtime.getRuntime(lib).newObjectReferenceManager(); MyCallback cb = new MyCallback { public void call(Pointer cb_argument) { Object javaCallbackArgument = referenceManager.get(cb_argument); System.out.println("java callback parameter=" + javaCallbackArgument); } } String callbackArgument = "Hello, World"; Pointer cb_argument = referenceManager.add(callback); lib.do_something_with_callback(cb, cb_argument); referenceManager.remove(cb_argument);
Each call to
add(Object)
will return a unique native address, even for the same object, so each call toadd(Object)
must be matched with a call toremove(Pointer)
.
-
-
Constructor Summary
Constructors Constructor Description ObjectReferenceManager()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description abstract Pointer
add(T object)
Adds a mapping from a java object to a unique native address.void
freeReference(Pointer reference)
Deprecated.useremove(Pointer)
abstract T
get(Pointer reference)
Gets the java object that is mapped to the native memory address referred to byreference
.T
getObject(Pointer reference)
Deprecated.useget(Pointer)
static <T> ObjectReferenceManager<T>
newInstance(Runtime runtime)
Pointer
newReference(T object)
Deprecated.useadd(Object)
abstract boolean
remove(Pointer reference)
Removes a mapping from java object to native pointer.
-
-
-
Method Detail
-
newInstance
public static <T> ObjectReferenceManager<T> newInstance(Runtime runtime)
-
newReference
@Deprecated public Pointer newReference(T object)
Deprecated.useadd(Object)
Adds a mapping from a java object to a unique native address. Each call to this method is guaranteed to produce a memory address unique within the ObjectReferenceManager instance, even for the same object.A strong reference to
object
is maintained internally, untilremove(Pointer)
is called.- Parameters:
object
- The java object to generate a reference for- Returns:
- A pointer representing the unique id.
-
freeReference
@Deprecated public void freeReference(Pointer reference)
Deprecated.useremove(Pointer)
Removes a mapping from java object to native pointer.- Parameters:
reference
- a native memory pointer.
-
getObject
@Deprecated public T getObject(Pointer reference)
Deprecated.useget(Pointer)
Gets the java object that is mapped to the native memory address referred to byreference
.- Parameters:
reference
- a native memory pointer.- Returns:
- The java object corresponding to
pointer
.
-
add
public abstract Pointer add(T object)
Adds a mapping from a java object to a unique native address. Each call to this method is guaranteed to produce a memory address unique within the ObjectReferenceManager instance, even for the same object.A strong reference to
object
is maintained internally, untilremove(Pointer)
is called.- Parameters:
object
- The java object to generate a reference for- Returns:
- A pointer representing the unique id.
-
remove
public abstract boolean remove(Pointer reference)
Removes a mapping from java object to native pointer.- Parameters:
reference
- a native memory pointer.- Returns:
- true if the mapping was removed.
-
-