summaryrefslogtreecommitdiff
path: root/src/runtime/java
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-08-29 05:35:45 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-08-29 05:35:45 +0000
commitbb007630d7a82210cbd0d78eab893e4f3b22679c (patch)
tree244e1810af8a243d6bb69e2533927c55b0c703c5 /src/runtime/java
parent430e9c1b49d304198180a0448a9ac18aa3d9784c (diff)
more carefull tracking of references in the Java binding
Diffstat (limited to 'src/runtime/java')
-rw-r--r--src/runtime/java/Test.java2
-rw-r--r--src/runtime/java/jpgf.c16
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/Expr.java6
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java14
-rw-r--r--src/runtime/java/org/grammaticalframework/pgf/ExprProb.java4
5 files changed, 24 insertions, 18 deletions
diff --git a/src/runtime/java/Test.java b/src/runtime/java/Test.java
index 15a8ff7ff..303eaf35f 100644
--- a/src/runtime/java/Test.java
+++ b/src/runtime/java/Test.java
@@ -24,7 +24,7 @@ public class Test {
Concr ger = gr.getLanguages().get("PhrasebookGer");
try {
- for (ExprProb ep : eng.parse(gr.getStartCat(), "where is the conference")) {
+ for (ExprProb ep : eng.parse(gr.getStartCat(), "where is the hotel")) {
System.out.println("["+ep.getProb()+"] "+ep.getExpr());
System.out.println(ger.linearize(ep.getExpr()));
}
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index ec68c87a4..b22638cb5 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -201,7 +201,7 @@ Java_org_grammaticalframework_pgf_Concr_getName(JNIEnv* env, jobject self)
JNIEXPORT jobject JNICALL
Java_org_grammaticalframework_pgf_Parser_parse
- (JNIEnv* env, jclass self, jobject concr, jstring jstartCat, jstring js)
+ (JNIEnv* env, jclass clazz, jobject concr, jstring jstartCat, jstring js)
{
GuPool* pool = gu_new_pool();
GuPool* out_pool = gu_new_pool();
@@ -229,16 +229,19 @@ Java_org_grammaticalframework_pgf_Parser_parse
return NULL;
}
+ jfieldID refId = (*env)->GetFieldID(env, (*env)->GetObjectClass(env, concr), "gr", "Lorg/grammaticalframework/pgf/PGF;");
+ jobject jpgf = (*env)->GetObjectField(env, concr, refId);
+
jclass expiter_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprIterator");
- jmethodID constrId = (*env)->GetMethodID(env, expiter_class, "<init>", "(Lorg/grammaticalframework/pgf/Concr;JJJ)V");
- jobject jexpiter = (*env)->NewObject(env, expiter_class, constrId, concr, (jlong) pool, (jlong) out_pool, (jlong) res);
+ jmethodID constrId = (*env)->GetMethodID(env, expiter_class, "<init>", "(Lorg/grammaticalframework/pgf/PGF;JJJ)V");
+ jobject jexpiter = (*env)->NewObject(env, expiter_class, constrId, jpgf, (jlong) pool, (jlong) out_pool, (jlong) res);
return jexpiter;
}
JNIEXPORT jobject JNICALL
Java_org_grammaticalframework_pgf_ExprIterator_fetchExprProb
- (JNIEnv* env, jobject self, jlong enumRef, jobject out_pool)
+ (JNIEnv* env, jobject self, jlong enumRef, jobject pool, jobject gr)
{
GuEnum* res = (GuEnum*) enumRef;
@@ -247,9 +250,10 @@ Java_org_grammaticalframework_pgf_ExprIterator_fetchExprProb
return NULL;
jclass expprob_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprProb");
- jmethodID methodId = (*env)->GetStaticMethodID(env, expprob_class, "mkExprProb", "(Lorg/grammaticalframework/pgf/Pool;JD)Lorg/grammaticalframework/pgf/ExprProb;");
+ jmethodID methodId = (*env)->GetStaticMethodID(env, expprob_class, "mkExprProb",
+ "(Lorg/grammaticalframework/pgf/Pool;Lorg/grammaticalframework/pgf/PGF;JD)Lorg/grammaticalframework/pgf/ExprProb;");
jobject jexpprob = (*env)->CallStaticObjectMethod(env, expprob_class, methodId,
- out_pool, (jlong) gu_variant_to_ptr(ep->expr), (double) ep->prob);
+ pool, gr, (jlong) gu_variant_to_ptr(ep->expr), (double) ep->prob);
return jexpprob;
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/Expr.java b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
index 0dc4d1c4b..bd2c0877e 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/Expr.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/Expr.java
@@ -2,13 +2,15 @@ package org.grammaticalframework.pgf;
public class Expr {
private Pool pool;
+ private PGF gr;
private long ref;
- Expr(Pool pool, long ref) {
+ Expr(Pool pool, PGF gr, long ref) {
this.pool = pool;
+ this.gr = gr;
this.ref = ref;
}
-
+
public String toString() {
return showExpr(ref);
}
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
index c2dc8438b..6babda66d 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/ExprIterator.java
@@ -3,14 +3,14 @@ package org.grammaticalframework.pgf;
import java.util.*;
class ExprIterator implements Iterator<ExprProb> {
- private Concr concr;
+ private PGF gr;
private Pool pool, out_pool;
private long ref;
private ExprProb ep;
private boolean fetched;
- public ExprIterator(Concr concr, long pool, long out_pool, long ref) {
- this.concr = concr;
+ public ExprIterator(PGF gr, long pool, long out_pool, long ref) {
+ this.gr = gr;
this.pool = new Pool(pool);
this.out_pool = new Pool(out_pool);
this.ref = ref;
@@ -18,20 +18,20 @@ class ExprIterator implements Iterator<ExprProb> {
this.fetched = false;
}
- private native ExprProb fetchExprProb(long ref, Pool out_pool);
+ private native ExprProb fetchExprProb(long ref, Pool pool, PGF gr);
private void fetch() {
if (!fetched) {
- ep = fetchExprProb(ref, out_pool);
+ ep = fetchExprProb(ref, out_pool, gr);
fetched = true;
}
}
-
+
public boolean hasNext() {
fetch();
return (ep != null);
}
-
+
public ExprProb next() {
fetch();
fetched = false;
diff --git a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
index d7d4f1cdf..676da13a8 100644
--- a/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
+++ b/src/runtime/java/org/grammaticalframework/pgf/ExprProb.java
@@ -9,8 +9,8 @@ public class ExprProb {
this.prob = prob;
}
- private static ExprProb mkExprProb(Pool pool, long expr, double prob) {
- return new ExprProb(new Expr(pool, expr), prob);
+ private static ExprProb mkExprProb(Pool pool, PGF gr, long expr, double prob) {
+ return new ExprProb(new Expr(pool, gr, expr), prob);
}
public Expr getExpr() {