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	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, "<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 ()