Mercurial > hg > audiodb
changeset 724:11fd16e1d8b3
* Initial code for status call (populating Status)
* Storing adb handle within Java object
author | mas01mj |
---|---|
date | Wed, 14 Jul 2010 17:21:24 +0000 |
parents | ca11b72f92b6 |
children | 7e1fa27b67ee |
files | bindings/java/ext/libAudioDB_JNI.c bindings/java/lib/lombok.jar bindings/java/src/org/omras2/AudioDB.java bindings/java/src/org/omras2/Status.java |
diffstat | 4 files changed, 74 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/bindings/java/ext/libAudioDB_JNI.c Wed Jul 14 16:02:00 2010 +0000 +++ b/bindings/java/ext/libAudioDB_JNI.c Wed Jul 14 17:21:24 2010 +0000 @@ -2,7 +2,7 @@ #include "org_omras2_AudioDB_Mode.h" #include <jni.h> #include "audioDB_API.h" - +#include <stdlib.h> JNIEXPORT jboolean JNICALL Java_org_omras2_AudioDB_audiodb_1create (JNIEnv *env, jobject obj, jstring path, jint datasize, jint ntracks, jint datadim) { @@ -16,7 +16,14 @@ handle = audiodb_create(str, datasize, ntracks, datadim); if(!handle) return JNI_FALSE; - + + jclass adbClass = (*env)->GetObjectClass(env, obj); + jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J"); + if(fid == NULL) { + return; + } + (*env)->SetLongField(env, obj, fid, (long)handle); + (*env)->DeleteLocalRef(env, adbClass); (*env)->ReleaseStringUTFChars(env, path, str); return JNI_TRUE; } @@ -39,7 +46,45 @@ { } -JNIEXPORT void JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj) +JNIEXPORT jobject JNICALL Java_org_omras2_AudioDB_audiodb_1status(JNIEnv *env, jobject obj) { + + // Fetch the adb pointer + + adb_t *handle; + + jclass adbClass = (*env)->GetObjectClass(env, obj); + jfieldID fid = (*env)->GetFieldID(env, adbClass, "adbHandle", "J"); + if(fid == NULL) { + return; + } + + handle = (adb_t*)((*env)->GetLongField(env, obj, fid)); + (*env)->DeleteLocalRef(env, adbClass); + + adb_status_t *status; + status = (adb_status_t *)malloc(sizeof(adb_status_t)); + int flags = audiodb_status(handle, status); + + jclass statusClass = (*env)->FindClass(env, "org/omras2/Status"); + if(statusClass == NULL) { + return NULL; + } + jmethodID cid = (*env)->GetMethodID(env, statusClass, "<init>", "()V"); + if(cid == NULL) { + return NULL; + } + + jobject result = (*env)->NewObject(env, statusClass, cid); + + fid = (*env)->GetFieldID(env, statusClass, "numFiles", "I"); + if(fid == NULL) { + return; + } + (*env)->SetIntField(env, result, fid, status->numFiles); + + (*env)->DeleteLocalRef(env, statusClass); + + return result; }
--- a/bindings/java/src/org/omras2/AudioDB.java Wed Jul 14 16:02:00 2010 +0000 +++ b/bindings/java/src/org/omras2/AudioDB.java Wed Jul 14 17:21:24 2010 +0000 @@ -6,15 +6,15 @@ { public native boolean audiodb_create(String path, int datasize, int ntracks, int datadim); public native boolean audiodb_open(String path, Mode mode); - public native void audiodb_status(); + public native Status audiodb_status(); - public native void insert(); - public native void query(); - public native void status(); +// public native void insert(); +// public native void query(); public enum Mode { O_RDONLY, O_RDRW } private File path; + private long adbHandle; public AudioDB(File path) { @@ -31,9 +31,9 @@ return audiodb_open(path.toString(), mode); } - public void getStatus() + public Status getStatus() { - audiodb_status(); + return audiodb_status(); } static { @@ -45,8 +45,9 @@ { AudioDB testDB = new AudioDB(new File("test.adb")); testDB.create(5, 5, 12); - testDB.open(Mode.O_RDRW); -// testDB.getStatus(); +// testDB.open(Mode.O_RDRW); + Status status = testDB.getStatus(); + System.out.println("Num files: "+status.getNumFiles()); } }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bindings/java/src/org/omras2/Status.java Wed Jul 14 17:21:24 2010 +0000 @@ -0,0 +1,17 @@ +package org.omras2; +import lombok.Getter; +import lombok.Setter; + +public class Status +{ + @Getter @Setter private int numFiles; + @Getter @Setter private int dims; + @Getter @Setter private int dudCount; + @Getter @Setter private int nullCount; + @Getter @Setter private int length; + @Getter @Setter private int dataRegionSize; + @Getter @Setter private boolean isL2Normed; + @Getter @Setter private boolean hasPower; + @Getter @Setter private boolean hasTimes; + @Getter @Setter private boolean hasRefs; +}