diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-08-27 22:39:26 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-08-27 22:39:26 +0000 |
| commit | e274cce21392f1737dfe55d72ba353a6809273ce (patch) | |
| tree | ec2aa9ca8b312c1fac4fb69f3108bdad137af4fe /src/runtime/java/jpgf.c | |
| parent | e1df8e713c7b0eec9f4d6ffdfae4cce53338931b (diff) | |
linearization in the Java binding
Diffstat (limited to 'src/runtime/java/jpgf.c')
| -rw-r--r-- | src/runtime/java/jpgf.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c index 41761a5a0..58c7eb743 100644 --- a/src/runtime/java/jpgf.c +++ b/src/runtime/java/jpgf.c @@ -244,6 +244,28 @@ Java_org_grammaticalframework_pgf_ExprIterator_fetchExprProb return jexpprob; } +JNIEXPORT jstring JNICALL +Java_org_grammaticalframework_pgf_Concr_linearize(JNIEnv* env, jobject self, jobject jexpr) +{ + GuPool* tmp_pool = gu_local_pool(); + GuExn* err = gu_new_exn(NULL, gu_kind(type), tmp_pool); + GuStringBuf* sbuf = gu_string_buf(tmp_pool); + GuWriter* wtr = gu_string_buf_writer(sbuf); + + pgf_linearize(get_ref(env, self), gu_variant_from_ptr((void*) get_ref(env, jexpr)), wtr, err); + if (!gu_ok(err)) { + // + return NULL; + } + + GuString str = gu_string_buf_freeze(sbuf, tmp_pool); + jstring jstr = gu2j_string(env, str); + + gu_pool_free(tmp_pool); + + return jstr; +} + JNIEXPORT void JNICALL Java_org_grammaticalframework_pgf_Pool_free(JNIEnv* env, jobject self, jlong ref) { |
