summaryrefslogtreecommitdiff
path: root/src/runtime/java/jpgf.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-09-06 07:21:38 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-09-06 07:21:38 +0000
commit5a4454aa8f910bc701da5cd4057eed77196764ad (patch)
treec043135e06f030c181c7a173090e6caf6a06994e /src/runtime/java/jpgf.c
parent14f8b96b563dda9f7d61f5dc1cde14436ef6ea69 (diff)
added exhaustive generation in the Java binding
Diffstat (limited to 'src/runtime/java/jpgf.c')
-rw-r--r--src/runtime/java/jpgf.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 17ae453cb..a0290aeae 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -395,3 +395,25 @@ Java_org_grammaticalframework_pgf_Expr_showExpr(JNIEnv* env, jclass clazz, jlong
gu_pool_free(tmp_pool);
return jstr;
}
+
+JNIEXPORT jobject JNICALL
+Java_org_grammaticalframework_pgf_Generator_generateAll(JNIEnv* env, jclass clazz, jobject jpgf, jstring jstartCat)
+{
+ GuPool* pool = gu_new_pool();
+
+ GuString startCat = j2gu_string(env, jstartCat, pool);
+
+ GuEnum* res =
+ pgf_generate_all(get_ref(env, jpgf), startCat, pool);
+ if (res == NULL) {
+ throw_string_exception(env, "org/grammaticalframework/pgf/PGFError", "The generation failed");
+ gu_pool_free(pool);
+ return NULL;
+ }
+
+ jclass expiter_class = (*env)->FindClass(env, "org/grammaticalframework/pgf/ExprIterator");
+ jmethodID constrId = (*env)->GetMethodID(env, expiter_class, "<init>", "(Lorg/grammaticalframework/pgf/PGF;JJJ)V");
+ jobject jexpiter = (*env)->NewObject(env, expiter_class, constrId, jpgf, p2l(pool), p2l(pool), p2l(res));
+
+ return jexpiter;
+}