// Path: sqlite-android/src/main/java/io/requery/android/database/sqlite/SQLiteClosable.java
// public abstract class SQLiteClosable implements Closeable {
//     private int mReferenceCount = 1;
// 
//     /**
//      * Called when the last reference to the object was released by
//      * a call to {@link #releaseReference()} or {@link #close()}.
//      */
//     protected abstract void onAllReferencesReleased();
// 
//     /**
//      * Acquires a reference to the object.
//      *
//      * @throws IllegalStateException if the last reference to the object has already
//      * been released.
//      */
//     public void acquireReference() {
//         synchronized(this) {
//             if (mReferenceCount <= 0) {
//                 throw new IllegalStateException(
//                         "attempt to re-open an already-closed object: " + this);
//             }
//             mReferenceCount++;
//         }
//     }
// 
//     /**
//      * Releases a reference to the object, closing the object if the last reference
//      * was released.
//      *
//      * @see #onAllReferencesReleased()
//      */
//     public void releaseReference() {
//         boolean refCountIsZero;
//         synchronized(this) {
//             refCountIsZero = --mReferenceCount == 0;
//         }
//         if (refCountIsZero) {
//             onAllReferencesReleased();
//         }
//     }
// 
//     /**
//      * Releases a reference to the object, closing the object if the last reference
//      * was released.
//      *
//      * Calling this method is equivalent to calling {@link #releaseReference}.
//      *
//      * @see #releaseReference()
//      * @see #onAllReferencesReleased()
//      */
//     public void close() {
//         releaseReference();
//     }
// }


import android.database.CharArrayBuffer;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import io.requery.android.database.sqlite.SQLiteClosable;
     * @return The value of the field as a <code>long</code>.
     */
    public long getLong(int row, int column) {
        return nativeGetLong(mWindowPtr, row - mStartPos, column);
    }

    /**
     * Gets the value of the field at the specified row and column index as a
     * <code>double</code>.
     * <p>
     * The result is determined as follows:
     * <ul>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
     * is <code>0.0</code>.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
     * is the value obtained by parsing the string value with <code>strtod</code>.
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the result
     * is the integer value converted to a <code>double</code>.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the result
     * is the <code>double</code> value.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
     * {@link SQLiteException} is thrown.</li>
     * </ul>
     * </p>
     *
     * @param row The zero-based row index.
     * @param column The zero-based column index.
     * @return The value of the field as a <code>double</code>.
     */
    public double getDouble(int row, int column) {
// Path: sqlite-android/src/main/java/io/requery/android/database/sqlite/SQLiteClosable.java
// public abstract class SQLiteClosable implements Closeable {
//     private int mReferenceCount = 1;
// 
//     /**
//      * Called when the last reference to the object was released by
//      * a call to {@link #releaseReference()} or {@link #close()}.
//      */
//     protected abstract void onAllReferencesReleased();
// 
//     /**
//      * Acquires a reference to the object.
//      *
//      * @throws IllegalStateException if the last reference to the object has already
//      * been released.
//      */
//     public void acquireReference() {
//         synchronized(this) {
//             if (mReferenceCount <= 0) {
//                 throw new IllegalStateException(
//                         "attempt to re-open an already-closed object: " + this);
//             }
//             mReferenceCount++;
//         }
//     }
// 
//     /**
//      * Releases a reference to the object, closing the object if the last reference
//      * was released.
//      *
//      * @see #onAllReferencesReleased()
//      */
//     public void releaseReference() {
//         boolean refCountIsZero;
//         synchronized(this) {
//             refCountIsZero = --mReferenceCount == 0;
//         }
//         if (refCountIsZero) {
//             onAllReferencesReleased();
//         }
//     }
// 
//     /**
//      * Releases a reference to the object, closing the object if the last reference
//      * was released.
//      *
//      * Calling this method is equivalent to calling {@link #releaseReference}.
//      *
//      * @see #releaseReference()
//      * @see #onAllReferencesReleased()
//      */
//     public void close() {
//         releaseReference();
//     }
// }


// Path: sqlite-android/src/main/java/io/requery/android/database/CursorWindow.java
import android.database.CharArrayBuffer;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import io.requery.android.database.sqlite.SQLiteClosable;

     * @return The value of the field as a <code>long</code>.
     */
    public long getLong(int row, int column) {
        return nativeGetLong(mWindowPtr, row - mStartPos, column);
    }

    /**
     * Gets the value of the field at the specified row and column index as a
     * <code>double</code>.
     * <p>
     * The result is determined as follows:
     * <ul>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_NULL}, then the result
     * is <code>0.0</code>.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_STRING}, then the result
     * is the value obtained by parsing the string value with <code>strtod</code>.
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_INTEGER}, then the result
     * is the integer value converted to a <code>double</code>.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_FLOAT}, then the result
     * is the <code>double</code> value.</li>
     * <li>If the field is of type {@link Cursor#FIELD_TYPE_BLOB}, then a
     * {@link SQLiteException} is thrown.</li>
     * </ul>
     * </p>
     *
     * @param row The zero-based row index.
     * @param column The zero-based column index.
     * @return The value of the field as a <code>double</code>.
     */
    public double getDouble(int row, int column) {
        return nativeGetDouble(mWindowPtr, row - mStartPos, column);