Package jnr.ffi

Class 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);
    
           
         
    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 Detail

      • ObjectReferenceManager

        public ObjectReferenceManager()
    • Method Detail

      • newReference

        @Deprecated
        public Pointer newReference​(T object)
        Deprecated.
        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, until remove(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.
        Removes a mapping from java object to native pointer.
        Parameters:
        reference - a native memory pointer.
      • getObject

        @Deprecated
        public T getObject​(Pointer reference)
        Deprecated.
        Gets the java object that is mapped to the native memory address referred to by reference.
        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, until remove(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.
      • get

        public abstract T get​(Pointer reference)
        Gets the java object that is mapped to the native memory address referred to by reference.
        Parameters:
        reference - a native memory pointer.
        Returns:
        The java object corresponding to pointer.