Author: mturk Date: Tue Apr 12 08:24:39 2011 New Revision: 1091322 URL: http://svn.apache.org/viewvc?rev=1091322&view=rev Log: Make sure each pointer type has its own cleanup
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ConstPointer.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/GenericPointer.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ConstPointer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ConstPointer.java?rev=1091322&r1=1091321&r2=1091322&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ConstPointer.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/ConstPointer.java Tue Apr 12 08:24:39 2011 @@ -28,7 +28,6 @@ final class ConstPointer extends Pointer private ConstPointer() { // No instance - ISCONST = true; } /* @@ -38,7 +37,19 @@ final class ConstPointer extends Pointer { POINTER = ptr; PLENGTH = len; - ISCONST = true; + } + + @Override + public final boolean isConst() + { + return true; + } + + @Override + public final void free() + throws Throwable + { + throw new UnsupportedOperationException(); } } Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/GenericPointer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/GenericPointer.java?rev=1091322&r1=1091321&r2=1091322&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/GenericPointer.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/GenericPointer.java Tue Apr 12 08:24:39 2011 @@ -24,6 +24,9 @@ package org.apache.commons.runtime; final class GenericPointer extends Pointer { + private static native void free0(long p) + throws Throwable; + private GenericPointer() { // No instance @@ -36,8 +39,43 @@ final class GenericPointer extends Point { POINTER = ptr; PLENGTH = len; - ISCONST = false; } + @Override + public final boolean isConst() + { + return false; + } + + @Override + public final void free() + throws Throwable + { + if (POINTER == 0L) + throw new NullPointerException(); + try { + free0(POINTER); + } finally { + POINTER = 0L; + } + } + + /** + * Called by the garbage collector when the object is destroyed. + * The class will free internal resources allocated by the Operating system. + * @see Object#finalize() + * @throws Throwable the {@code Exception} raised by this method. + */ + @Override + protected final void finalize() + throws Throwable + { + try { + free0(POINTER); + } finally { + POINTER = 0L; + } + } + } Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=1091322&r1=1091321&r2=1091322&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Tue Apr 12 08:24:39 2011 @@ -29,7 +29,6 @@ public abstract class Pointer implements protected long POINTER; protected long PLENGTH; - protected boolean ISCONST; /** * Create new {@code null} Pointer instance. @@ -56,9 +55,6 @@ public abstract class Pointer implements // No Instance } - private native void free0(long p) - throws Throwable; - private static native Pointer nullptr0(); /** @@ -74,7 +70,7 @@ public abstract class Pointer implements * * @return Internal pointer address casted to the {@code long}. */ - public long address() + public final long address() { return POINTER; } @@ -88,7 +84,7 @@ public abstract class Pointer implements * * @return Internal pointer size. */ - public long sizeof() + public final long sizeof() { return PLENGTH; } @@ -98,12 +94,18 @@ public abstract class Pointer implements * Check if the pointer is valid * @return true if the internal pointer is not {@code NULL}. */ - public boolean isNull() + public final boolean isNull() { return POINTER == 0L; } /** + * Check if the pointer is valid + * @return true if the internal pointer is not {@code NULL}. + */ + public abstract boolean isConst(); + + /** * Compares this {@code Pointer} to the specified object. * * @param other a {@code Pointer} @@ -113,7 +115,7 @@ public abstract class Pointer implements * equal. Returns false otherwise. */ @Override - public boolean equals(Object other) + public final boolean equals(Object other) { if (other == null) return false; @@ -134,7 +136,7 @@ public abstract class Pointer implements * is less then, equal, or greater then the specified object. */ @Override - public int compareTo(Pointer other) + public final int compareTo(Pointer other) throws ClassCastException { if (other == null) @@ -152,24 +154,6 @@ public abstract class Pointer implements } /** - * Called by the garbage collector when the object is destroyed. - * The class will free internal resources allocated by the Operating system. - * @see Object#finalize() - * @throws Throwable the {@code Exception} raised by this method. - */ - @Override - protected final void finalize() - throws Throwable - { - try { - if (!ISCONST) - free0(POINTER); - } finally { - POINTER = 0L; - } - } - - /** * Free the allocated resource by the Operating system. * <p> * Note that {@code Object.finalize()} method will call @@ -179,19 +163,8 @@ public abstract class Pointer implements * @see #finalize() * @throws Throwable the {@code Exception} raised by this method. */ - public final void free() - throws Throwable - { - if (ISCONST) - throw new UnsupportedOperationException(); - if (POINTER == 0L) - throw new NullPointerException(); - try { - free0(POINTER); - } finally { - POINTER = 0L; - } - } + public abstract void free() + throws Throwable; /** * Returns a string representation of the Pointer.