Package jnr.ffi
Class ObjectReferenceManager<T>
java.lang.Object
jnr.ffi.ObjectReferenceManager<T>
- Direct Known Subclasses:
DefaultObjectReferenceManager
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);
Note
Each call to add(Object)
will return a unique native address, even for the same object, so each call to
add(Object)
must be matched with a call to remove(Pointer)
.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract Pointer
Adds a mapping from a java object to a unique native address.void
freeReference
(Pointer reference) Deprecated.abstract T
Gets the java object that is mapped to the native memory address referred to byreference
.Deprecated.useget(Pointer)
static <T> ObjectReferenceManager<T>
newInstance
(Runtime runtime) newReference
(T object) Deprecated.useadd(Object)
abstract boolean
Removes a mapping from java object to native pointer.
-
Constructor Details
-
ObjectReferenceManager
public ObjectReferenceManager()
-
-
Method Details
-
newInstance
-
newReference
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.useremove(Pointer)
Removes a mapping from java object to native pointer.- Parameters:
reference
- a native memory pointer.
-
getObject
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
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
Removes a mapping from java object to native pointer.- Parameters:
reference
- a native memory pointer.- Returns:
- true if the mapping was removed.
-
get
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
.
-
remove(Pointer)