summaryrefslogtreecommitdiff
path: root/src/runtime/java
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2014-04-25 08:53:18 +0000
committerkr.angelov <kr.angelov@gmail.com>2014-04-25 08:53:18 +0000
commitd278965095723460985989f183b8fab4a7fde779 (patch)
tree4a69c2b6f7fa02b20ef00283004a836026e29f0d /src/runtime/java
parent3a0da12e3dae3180eadd60fb1b21410f1b92a859 (diff)
an initial Java/C API for predicting literals. Still not utilized
Diffstat (limited to 'src/runtime/java')
-rw-r--r--src/runtime/java/jpgf.c62
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java6
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java7
3 files changed, 66 insertions, 9 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 6f88250f0..c0a9873a8 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -713,19 +713,26 @@ typedef struct {
PgfLiteralCallback callback;
jobject jcallback;
jmethodID match_methodId;
+ jmethodID predict_methodId;
GuFinalizer fin;
} JPgfLiteralCallback;
-static PgfExprProb*
-jpgf_literal_callback_fn(PgfLiteralCallback* self,
- size_t lin_idx,
- GuString sentence, size_t* poffset,
- GuPool *out_pool)
+typedef struct {
+ GuEnum en;
+ jobject jiterator;
+ GuFinalizer fin;
+} JPgfTokenProbEnum;
+
+static PgfExprProb*
+jpgf_literal_callback_match(PgfLiteralCallback* self,
+ size_t lin_idx,
+ GuString sentence, size_t* poffset,
+ GuPool *out_pool)
{
JPgfLiteralCallback* callback = gu_container(self, JPgfLiteralCallback, callback);
JNIEnv *env;
- (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL);
+ (*cachedJVM)->AttachCurrentThread(cachedJVM, &env, NULL);
jstring jsentence = gu2j_string(env, sentence);
jobject result = (*env)->CallObjectMethod(env, callback->jcallback, callback->match_methodId, lin_idx, jsentence, *poffset);
@@ -783,12 +790,49 @@ jpgf_literal_callback_fn(PgfLiteralCallback* self,
}
static void
+jpgf_token_prob_enum_fin(GuFinalizer* self)
+{
+ JPgfTokenProbEnum* en = gu_container(self, JPgfTokenProbEnum, fin);
+
+ JNIEnv *env;
+ (*cachedJVM)->AttachCurrentThread(cachedJVM, &env, NULL);
+
+ (*env)->DeleteGlobalRef(env, en->jiterator);
+}
+
+static GuEnum*
+jpgf_literal_callback_predict(PgfLiteralCallback* self,
+ size_t lin_idx,
+ GuString prefix,
+ GuPool *out_pool)
+{
+ JPgfLiteralCallback* callback = gu_container(self, JPgfLiteralCallback, callback);
+
+ JNIEnv *env;
+ (*cachedJVM)->AttachCurrentThread(cachedJVM, &env, NULL);
+
+ jstring jprefix = gu2j_string(env, prefix);
+ jobject jiterator = (*env)->CallObjectMethod(env, callback->jcallback, callback->predict_methodId, lin_idx, jprefix);
+ if (jiterator == NULL)
+ return NULL;
+
+ JPgfTokenProbEnum* en = gu_new(JPgfTokenProbEnum, out_pool);
+ en->en.next = NULL;
+ en->jiterator = (*env)->NewGlobalRef(env, jiterator);
+ en->fin.fn = jpgf_token_prob_enum_fin;
+
+ gu_pool_finally(out_pool, &en->fin);
+
+ return &en->en;
+}
+
+static void
jpgf_literal_callback_fin(GuFinalizer* self)
{
JPgfLiteralCallback* callback = gu_container(self, JPgfLiteralCallback, fin);
JNIEnv *env;
- (*cachedJVM)->AttachCurrentThread(cachedJVM, (void **)&env, NULL);
+ (*cachedJVM)->AttachCurrentThread(cachedJVM, &env, NULL);
(*env)->DeleteGlobalRef(env, callback->jcallback);
}
@@ -800,12 +844,14 @@ Java_org_grammaticalframework_pgf_Concr_addLiteral(JNIEnv* env, jobject self, js
GuPool* pool = pgf_concr_get_pool(concr);
JPgfLiteralCallback* callback = gu_new(JPgfLiteralCallback, pool);
- callback->callback.match = jpgf_literal_callback_fn;
+ callback->callback.match = jpgf_literal_callback_match;
+ callback->callback.predict = jpgf_literal_callback_predict;
callback->jcallback = (*env)->NewGlobalRef(env, jcallback);
callback->fin.fn = jpgf_literal_callback_fin;
jclass callback_class = (*env)->GetObjectClass(env, jcallback);
callback->match_methodId = (*env)->GetMethodID(env, callback_class, "match", "(ILjava/lang/String;I)Lorg/grammaticalframework/pgf/LiteralCallback$CallbackResult;");
+ callback->predict_methodId = (*env)->GetMethodID(env, callback_class, "predict", "(ILjava/lang/String;)Ljava/util/Iterator;");
gu_pool_finally(pool, &callback->fin);
diff --git a/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java b/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
index 87e832ae2..106b528e6 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/LiteralCallback.java
@@ -1,8 +1,12 @@
package org.grammaticalframework.pgf;
+import java.util.Iterator;
+
public interface LiteralCallback {
public CallbackResult match(int lin_idx, String sentence, int start_offset);
-
+
+ public Iterator<TokenProb> predict(int lin_idx, String prefix);
+
public static class CallbackResult {
private ExprProb ep;
private int offset;
diff --git a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
index 72f24e712..627cbdd4f 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/NercLiteralCallback.java
@@ -1,5 +1,8 @@
package org.grammaticalframework.pgf;
+import java.util.Collections;
+import java.util.Iterator;
+
public class NercLiteralCallback implements LiteralCallback {
public CallbackResult match(int lin_idx, String sentence, int offset) {
StringBuilder sbuilder = new StringBuilder();
@@ -33,4 +36,8 @@ public class NercLiteralCallback implements LiteralCallback {
return null;
}
+
+ public Iterator<TokenProb> predict(int lin_idx, String prefix) {
+ return Collections.<TokenProb>emptyList().iterator();
+ }
}