You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
1.4 KiB

/*
* Copyright (c) 2018 Jämes Ménétrey <james@menetrey.me>
*
* This file is part of the Keystone Java bindings which is released under MIT.
* See file LICENSE in the Java bindings folder for full license details.
*/
package keystone.natives;
import com.sun.jna.Pointer;
/**
* The cleaner that automatically close the {@code Pointer} of Keystone once the managed object is phantom reachable.
*/
public class KeystoneCleanerContainer extends CleanerContainer {
/**
* Registers an object and a cleaning action to run when the object becomes phantom reachable.
*/
public KeystoneCleanerContainer(Pointer pointerToEngine) {
super(new KeystoneState(pointerToEngine));
}
/**
* The internal state that contains the logic to free the native resource.
*/
static class KeystoneState implements Runnable {
/**
* A pointer to the native resource.
*/
private final Pointer pointerToEngine;
/**
* Create a new instance of {@link KeystoneState}.
*
* @param pointerToEngine The pointer to the Keystone native resource.
*/
KeystoneState(Pointer pointerToEngine) {
this.pointerToEngine = pointerToEngine;
}
/**
* Calls the logic to collect the native resource.
*/
@Override
public void run() {
DirectMappingKeystoneNative.ks_close(pointerToEngine);
}
}
}