summaryrefslogtreecommitdiff
path: root/src/runtime/java/jpgf.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-10-04 12:04:39 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-10-04 12:04:39 +0000
commite8335806afc45e31157937b880ff39b75c14a2cd (patch)
tree5e3233cfdf934ff350f66d755bde759512ef5f20 /src/runtime/java/jpgf.c
parent27091048ce8276cc542e909588695d273e95b087 (diff)
GuString is now an ordinary C string - it makes live easier. In addition PgfSymbolKS, PgfExprFun and PgfLiteralStr now keep their strings as embedded flexible arrays. The latest change gives us the same compactness as the old representation but it is a lot easier to use.
Diffstat (limited to 'src/runtime/java/jpgf.c')
-rw-r--r--src/runtime/java/jpgf.c40
1 files changed, 9 insertions, 31 deletions
diff --git a/src/runtime/java/jpgf.c b/src/runtime/java/jpgf.c
index 7a8792a71..b31f52fd5 100644
--- a/src/runtime/java/jpgf.c
+++ b/src/runtime/java/jpgf.c
@@ -11,32 +11,13 @@
static jstring
gu2j_string(JNIEnv *env, GuString s) {
- GuWord w = s.w_;
- uint8_t buf[sizeof(GuWord)];
-
- uint8_t* utf8;
- size_t len;
- if (w & 1) {
- len = (w & 0xff) >> 1;
- gu_assert(len <= sizeof(GuWord));
- size_t i = len;
- while (i > 0) {
- w >>= 8;
- buf[--i] = w & 0xff;
- }
- utf8 = buf;
- } else {
- uint8_t* p = (void*) w;
- len = (p[0] == 0) ? ((size_t*) p)[-1] : p[0];
- utf8 = &p[1];
- }
-
- const uint8_t* src = utf8;
+ const char* utf8 = s;
+ size_t len = strlen(s);
jchar* utf16 = alloca(len*sizeof(jchar));
jchar* dst = utf16;
- while (src-utf8 < len) {
- GuUCS ucs = gu_utf8_decode(&src);
+ while (s-utf8 < len) {
+ GuUCS ucs = gu_utf8_decode((const uint8_t**) &s);
if (ucs <= 0xFFFF) {
*dst++ = ucs;
@@ -52,10 +33,10 @@ gu2j_string(JNIEnv *env, GuString s) {
static GuString
j2gu_string(JNIEnv *env, jstring s, GuPool* pool) {
- const char *str = (*env)->GetStringUTFChars(env, s, 0);
- GuString s = gu_str_string(str, pool);
+ GuString str = (*env)->GetStringUTFChars(env, s, 0);
+ str = gu_string_copy(str, pool);
(*env)->ReleaseStringUTFChars(env, s, str);
- return s;
+ return str;
}
static void*
@@ -223,10 +204,7 @@ Java_org_grammaticalframework_pgf_PGF_getAbstractName(JNIEnv* env, jobject self)
JNIEXPORT jstring JNICALL
Java_org_grammaticalframework_pgf_PGF_getStartCat(JNIEnv* env, jobject self)
{
- GuPool* tmp_pool = gu_local_pool();
- jstring jname = gu2j_string(env, pgf_start_cat(get_ref(env, self), tmp_pool));
- gu_pool_free(tmp_pool);
- return jname;
+ return gu2j_string(env, pgf_start_cat(get_ref(env, self)));
}
typedef struct {
@@ -313,7 +291,7 @@ Java_org_grammaticalframework_pgf_Parser_parse
PgfToken tok =
pgf_lexer_current_token(lexer);
- if (gu_string_eq(tok, gu_empty_string))
+ if (*tok == 0)
throw_string_exception(env, "org/grammaticalframework/pgf/PGFError", "The sentence cannot be parsed");
else
throw_jstring_exception(env, "org/grammaticalframework/pgf/ParseError", gu2j_string(env, tok));