comparison libinterp/octave-value/ov-java.cc @ 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 abc9e5f3c661
comparison
equal deleted inserted replaced
15821:72661fe4b9e5 15822:e7d9db9531d1
1162 std::string s = val.string_value (); 1162 std::string s = val.string_value ();
1163 1163
1164 jobj = jni_env->NewStringUTF (s.c_str ()); 1164 jobj = jni_env->NewStringUTF (s.c_str ());
1165 jcls = jni_env->GetObjectClass (jobj); 1165 jcls = jni_env->GetObjectClass (jobj);
1166 } 1166 }
1167 else if (val.is_real_scalar ())
1168 {
1169 if (val.is_double_type ())
1170 {
1171 double dval = val.double_value ();
1172 jclass_ref dcls (jni_env, jni_env->FindClass ("java/lang/Double"));
1173 jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;");
1174 jmethodID mid = jni_env->GetMethodID (dcls, "<init>", "(D)V");
1175 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid));
1176 jobj = jni_env->NewObject (dcls, mid, dval);
1177 }
1178 else
1179 {
1180 float fval = val.float_scalar_value ();
1181 jclass_ref fcls (jni_env, jni_env->FindClass ("java/lang/Float"));
1182 jfieldID fid = jni_env->GetStaticFieldID (fcls, "TYPE", "Ljava/lang/Class;");
1183 jmethodID mid = jni_env->GetMethodID (fcls, "<init>", "(F)V");
1184 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (fcls, fid));
1185 jobj = jni_env->NewObject (fcls, mid, fval);
1186 }
1187 }
1188 else if (val.is_integer_type () && val.is_scalar_type ())
1189 {
1190 int32_t ival = val.int32_scalar_value ();
1191 jclass_ref icls (jni_env, jni_env->FindClass ("java/lang/Integer"));
1192 jfieldID fid = jni_env->GetStaticFieldID (icls, "TYPE", "Ljava/lang/Class;");
1193 jmethodID mid = jni_env->GetMethodID (icls, "<init>", "(I)V");
1194 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (icls, fid));
1195 jobj = jni_env->NewObject (icls, mid, ival);
1196 }
1167 else if (val.is_bool_scalar ()) 1197 else if (val.is_bool_scalar ())
1168 { 1198 {
1169 bool bval = val.bool_value (); 1199 bool bval = val.bool_value ();
1170 jclass_ref bcls (jni_env, jni_env->FindClass ("java/lang/Boolean")); 1200 jclass_ref bcls (jni_env, jni_env->FindClass ("java/lang/Boolean"));
1171 jfieldID fid = jni_env->GetStaticFieldID (bcls, "TYPE", "Ljava/lang/Class;"); 1201 jfieldID fid = jni_env->GetStaticFieldID (bcls, "TYPE", "Ljava/lang/Class;");
1172 jmethodID mid = jni_env->GetMethodID (bcls, "<init>", "(Z)V"); 1202 jmethodID mid = jni_env->GetMethodID (bcls, "<init>", "(Z)V");
1173 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (bcls, fid)); 1203 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (bcls, fid));
1174 jobj = jni_env->NewObject (bcls, mid, bval); 1204 jobj = jni_env->NewObject (bcls, mid, bval);
1175 } 1205 }
1176 else if (val.is_real_scalar ())
1177 {
1178 double dval = val.double_value ();
1179 jclass_ref dcls (jni_env, jni_env->FindClass ("java/lang/Double"));
1180 jfieldID fid = jni_env->GetStaticFieldID (dcls, "TYPE", "Ljava/lang/Class;");
1181 jmethodID mid = jni_env->GetMethodID (dcls, "<init>", "(D)V");
1182 jcls = reinterpret_cast<jclass> (jni_env->GetStaticObjectField (dcls, fid));
1183 jobj = jni_env->NewObject (dcls, mid, dval);
1184 }
1185 else if (val.is_empty ()) 1206 else if (val.is_empty ())
1186 { 1207 {
1187 jobj = 0; 1208 jobj = 0;
1209 jcls = 0;
1188 //jcls = jni_env->FindClass ("java/lang/Object"); 1210 //jcls = jni_env->FindClass ("java/lang/Object");
1189 jcls = 0;
1190 } 1211 }
1191 else if (!Vjava_matrix_autoconversion 1212 else if (!Vjava_matrix_autoconversion
1192 && ((val.is_real_matrix () 1213 && ((val.is_real_matrix ()
1193 && (val.rows () == 1 || val.columns () == 1)) 1214 && (val.rows () == 1 || val.columns () == 1))
1194 || val.is_range ())) 1215 || val.is_range ()))