Mercurial > hg > octave-lyh
changeset 15822:e7d9db9531d1
Add conversion for Octave integer and single classes to Java int and float classes.
* libinterp/octave-value/ov-java.cc(unbox): Check is_double_type and convert
to Java Double or Java Float class. Check is_integer_type(all Octave integers)
and convert to Java Integer class (signed 32-bit int).
author | Rik <rik@octave.org> |
---|---|
date | Thu, 20 Dec 2012 08:12:55 -0800 |
parents | 72661fe4b9e5 |
children | bc7a130bbdfb |
files | libinterp/octave-value/ov-java.cc |
diffstat | 1 files changed, 31 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/libinterp/octave-value/ov-java.cc +++ b/libinterp/octave-value/ov-java.cc @@ -1164,6 +1164,36 @@ jobj = jni_env->NewStringUTF (s.c_str ()); jcls = jni_env->GetObjectClass (jobj); } + else if (val.is_real_scalar ()) + { + if (val.is_double_type ()) + { + double dval = val.double_value (); + jclass_ref dcls (jni_env, jni_env->FindClass ("java/lang/Double")); + jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;"); + jmethodID mid = jni_env->GetMethodID (dcls, "<init>", "(D)V"); + jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid)); + jobj = jni_env->NewObject (dcls, mid, dval); + } + else + { + float fval = val.float_scalar_value (); + jclass_ref fcls (jni_env, jni_env->FindClass ("java/lang/Float")); + jfieldID fid = jni_env->GetStaticFieldID (fcls, "TYPE", "Ljava/lang/Class;"); + jmethodID mid = jni_env->GetMethodID (fcls, "<init>", "(F)V"); + jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (fcls, fid)); + jobj = jni_env->NewObject (fcls, mid, fval); + } + } + else if (val.is_integer_type () && val.is_scalar_type ()) + { + int32_t ival = val.int32_scalar_value (); + jclass_ref icls (jni_env, jni_env->FindClass ("java/lang/Integer")); + jfieldID fid = jni_env->GetStaticFieldID (icls, "TYPE", "Ljava/lang/Class;"); + jmethodID mid = jni_env->GetMethodID (icls, "<init>", "(I)V"); + jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (icls, fid)); + jobj = jni_env->NewObject (icls, mid, ival); + } else if (val.is_bool_scalar ()) { bool bval = val.bool_value (); @@ -1173,20 +1203,11 @@ jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (bcls, fid)); jobj = jni_env->NewObject (bcls, mid, bval); } - else if (val.is_real_scalar ()) - { - double dval = val.double_value (); - jclass_ref dcls (jni_env, jni_env->FindClass ("java/lang/Double")); - jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;"); - jmethodID mid = jni_env->GetMethodID (dcls, "<init>", "(D)V"); - jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid)); - jobj = jni_env->NewObject (dcls, mid, dval); - } else if (val.is_empty ()) { jobj = 0; + jcls = 0; //jcls = jni_env->FindClass ("java/lang/Object"); - jcls = 0; } else if (!Vjava_matrix_autoconversion && ((val.is_real_matrix ()