public abstract class ObjectReferenceManager<T> extends Object
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 and Description |
---|
ObjectReferenceManager() |
Modifier and Type | Method and Description |
---|---|
abstract Pointer |
add(T object)
Adds a mapping from a java object to a unique native address.
|
void |
freeReference(Pointer reference)
Deprecated.
use
remove(Pointer) |
abstract T |
get(Pointer reference)
Gets the java object that is mapped to the native memory address referred to by
reference . |
T |
getObject(Pointer reference)
Deprecated.
use
get(Pointer) |
static <T> ObjectReferenceManager<T> |
newInstance(Runtime runtime) |
Pointer |
newReference(T object)
Deprecated.
use
add(Object) |
abstract boolean |
remove(Pointer reference)
Removes a mapping from java object to native pointer.
|
public static <T> ObjectReferenceManager<T> newInstance(Runtime runtime)
@Deprecated public Pointer newReference(T object)
add(Object)
A strong reference to object
is maintained internally, until remove(Pointer)
is called.
object
- The java object to generate a reference for@Deprecated public void freeReference(Pointer reference)
remove(Pointer)
reference
- a native memory pointer.@Deprecated public T getObject(Pointer reference)
get(Pointer)
reference
.reference
- a native memory pointer.pointer
.public abstract Pointer add(T object)
A strong reference to object
is maintained internally, until remove(Pointer)
is called.
object
- The java object to generate a reference forpublic abstract boolean remove(Pointer reference)
reference
- a native memory pointer.Copyright © 2017. All rights reserved.