# HG changeset patch # User Rik # Date 1356019975 28800 # Node ID e7d9db9531d1ad9e462ce6b1c6326a0108db7bd6 # Parent 72661fe4b9e5099283837e02065d260e94f971c5 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). diff -r 72661fe4b9e5 -r e7d9db9531d1 libinterp/octave-value/ov-java.cc --- a/libinterp/octave-value/ov-java.cc Wed Dec 19 17:18:54 2012 -0800 +++ b/libinterp/octave-value/ov-java.cc Thu Dec 20 08:12:55 2012 -0800 @@ -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, "", "(D)V"); + jcls = reinterpret_cast (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, "", "(F)V"); + jcls = reinterpret_cast (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, "", "(I)V"); + jcls = reinterpret_cast (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 (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, "", "(D)V"); - jcls = reinterpret_cast (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 ()