/** * Increments either the java or native reference count * * @param address * @param nativeRef */ protected void incrementRefCount(long address, boolean nativeRef) { if (address != NITFObject.INVALID_ADDRESS) { if (trackedObjects.containsKey(address)) { TrackedObject trackedObject = trackedObjects.get(address); trackedObject.reference(nativeRef); log.debug("Incremented ref count: " + trackedObject.toString()); } else { log.error("Unable to track unkown object: " + address); } } else { log.error("Cannot reference invalid address"); } }
/** * Increments the java reference count of an object * * @param object */ protected void incrementRefCount(DestructibleObject object) { if (object != null && object.isValid()) { long address = object.getAddress(); if (trackedObjects.containsKey(address)) { TrackedObject trackedObject = trackedObjects.get(address); trackedObject.reference(false); log.debug("Incremented ref count: " + trackedObject.toString()); } else { TrackedObject trackedObject = new TrackedObject(object); trackedObjects.put(address, trackedObject); log.debug("Tracking new object: " + trackedObject.toString()); } } else { log.error("Cannot reference invalid object"); } }
/** * Decrements the reference count of an object, and destructs the object if the count is now < 1 * * @param object */ protected void decrementRefCount(long address, boolean nativeRef) { if (address != NITFObject.INVALID_ADDRESS) { // if its in here, update its count, if not, forget about it if (trackedObjects.containsKey(address)) { TrackedObject trackedObject = trackedObjects.get(address); trackedObject.unReference(nativeRef); log.debug("Decremented ref count: " + trackedObject.toString()); if (trackedObject.canDestroy()) { if (trackedObject.destroy()) { trackedObjects.remove(address); log.debug("Destroyed object: " + trackedObject.toString()); } else { log.error("Unable to destroy object: " + trackedObject.toString()); } } } else { log.warn("Unable to decrement reference count for untracked address: " + address); } } else { log.error("Cannot reference invalid address"); } }
protected String getObjectInfo(long address) { TrackedObject trackedObject = trackedObjects.get(address); return trackedObject != null ? trackedObject.toString() : null; }