From 6283489260700dc5be78693c98ef89f13437a90e Mon Sep 17 00:00:00 2001 From: krasimir Date: Wed, 10 May 2017 12:19:27 +0000 Subject: [PATCH] finished Type.getHypos & added Hypo.getType --- src/runtime/java/jpgf.c | 22 +++++++++++++++++-- .../org/grammaticalframework/pgf/Hypo.java | 11 ++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index aa4b09473..4f9ee7c4d 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -1281,10 +1281,16 @@ Java_org_grammaticalframework_pgf_Type_getHypos(JNIEnv* env, jobject self) PgfType* tp = get_ref(env, self); jclass hypo_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/Hypo"); + jmethodID constrId = (*env)->GetMethodID(env, hypo_class, "", "(Ljava/lang/Object;J)V"); size_t n_hypos = gu_seq_length(tp->hypos); - jobjectArray jhypos = (*env)->NewObjectArray(env, n_hypos, hypo_class, NULL); - + jobjectArray jhypos = (*env)->NewObjectArray(env, n_hypos, hypo_class, NULL); + for (size_t i = 0; i < n_hypos; i++) { + PgfHypo *hypo = gu_seq_index(tp->hypos, PgfHypo, i); + jobject jhypo = (*env)->NewObject(env, hypo_class, constrId, self, p2l(hypo)); + (*env)->SetObjectArrayElement(env, jhypos, i, jhypo); + (*env)->DeleteLocalRef(env, jhypo); + } return jhypos; } @@ -1305,6 +1311,18 @@ Java_org_grammaticalframework_pgf_Type_toString(JNIEnv* env, jobject self) return jstr; } +JNIEXPORT jobject JNICALL +Java_org_grammaticalframework_pgf_Hypo_getType(JNIEnv* env, jobject self) +{ + PgfHypo* hypo = get_ref(env, self); + + jclass type_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/Type"); + jmethodID constrId = (*env)->GetMethodID(env, type_class, "", "(Ljava/lang/Object;J)V"); + jobject jtype = (*env)->NewObject(env, type_class, constrId, self, p2l(hypo->type)); + + return jtype; +} + JNIEXPORT jobject JNICALL Java_org_grammaticalframework_pgf_Generator_generateAll(JNIEnv* env, jclass clazz, jobject jpgf, jstring jstartCat) { diff --git a/src/runtime/java/org/grammaticalframework/pgf/Hypo.java b/src/runtime/java/org/grammaticalframework/pgf/Hypo.java index 660b1843f..132f94845 100644 --- a/src/runtime/java/org/grammaticalframework/pgf/Hypo.java +++ b/src/runtime/java/org/grammaticalframework/pgf/Hypo.java @@ -8,4 +8,15 @@ public class Hypo { /** The type for this hypothesis */ public native Type getType(); + + ////////////////////////////////////////////////////////////////// + // private stuff + + private Object master; + private long ref; + + private Hypo(Object master, long ref) { + this.master = master; + this.ref = ref; + } }