changeset 15813:10d6ab9b1b4f

Implement octave_value function class_name() for class "octave_java" * libinterp/octave-value/ov-class.cc(Fclass): Remove special code for Java objects; Just call class_name() on octave_value object. * libinterp/octave-value/ov-java.h: Declare octave_value type functions. Rename confusing octave_java class private variable java_type to java_classname. * libinterp/octave-value/ov-java.cc: Replace tests for Java object from class_name() == "octave_java" to is_java().
author Rik <rik@octave.org>
date Tue, 18 Dec 2012 10:29:51 -0800
parents 83bf6fd9e46d
children 1eee8d8c59fd
files libinterp/octave-value/ov-class.cc libinterp/octave-value/ov-java.cc libinterp/octave-value/ov-java.h
diffstat 3 files changed, 37 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/libinterp/octave-value/ov-class.cc	Tue Dec 18 08:21:29 2012 -0800
+++ b/libinterp/octave-value/ov-class.cc	Tue Dec 18 10:29:51 2012 -0800
@@ -1942,15 +1942,7 @@
     print_usage ();
   else if (nargin == 1)
     // Called for class of object
-    if (! args(0).is_java ())
-      retval = args(0).class_name ();
-    else
-      {
-#ifdef HAVE_JAVA
-        octave_java *jobj = dynamic_cast<octave_java*>(args(0).internal_rep ());
-        retval = jobj->java_class_name ();
-#endif
-      }
+    retval = args(0).class_name ();
   else
     {
       // Called as class constructor
--- a/libinterp/octave-value/ov-java.cc	Tue Dec 18 08:21:29 2012 -0800
+++ b/libinterp/octave-value/ov-java.cc	Tue Dec 18 10:29:51 2012 -0800
@@ -1063,7 +1063,7 @@
 {
   octave_value retval = box (jni_env, jobj, jcls);
 
-  if (retval.class_name () == "octave_java")
+  if (retval.is_java ())
     {
       retval = octave_value ();
 
@@ -1153,7 +1153,7 @@
 {
   int found = 1;
 
-  if (val.class_name () == "octave_java")
+  if (val.is_java ())
     {
       octave_java *ovj = TO_JAVA (val);
       jobj = ovj->to_java ();
@@ -1514,7 +1514,16 @@
 
 DEFINE_OCTAVE_ALLOCATOR (octave_java);
 
-DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_java, "octave_java", "octave_java");
+int octave_java::t_id (-1);
+
+const std::string octave_java::t_name ("octave_java");
+
+void
+octave_java::register_type (void)
+{
+  t_id = octave_value_typeinfo::register_type
+    (octave_java::t_name, "<unknown>", octave_value (new octave_java ()));
+}
 
 dim_vector
 octave_java::dims (void) const
@@ -1978,7 +1987,7 @@
               for (int i=2; i<args.length (); i++)
                 tmp(i-2) = args(i);
 
-              if (args(1).class_name () == "octave_java")
+              if (args(1).is_java ())
                 {
                   octave_java *jobj = TO_JAVA (args(1));
                   retval = jobj->do_javaMethod (current_env, methodname, tmp);
@@ -2040,7 +2049,7 @@
           std::string name = args(1).string_value ();
           if (! error_state)
             {
-              if (args(0).class_name () == "octave_java")
+              if (args(0).is_java ())
                 {
                   octave_java *jobj = TO_JAVA (args(0));
                   retval = jobj->do_java_get (current_env, name);
@@ -2102,7 +2111,7 @@
           std::string name = args(1).string_value ();
           if (! error_state)
             {
-              if (args(0).class_name () == "octave_java")
+              if (args(0).is_java ())
                 {
                   octave_java *jobj = TO_JAVA (args(0));
                   retval = jobj->do_java_set (current_env, name, args(2));
@@ -2146,7 +2155,7 @@
 
       if (args.length () == 1)
         {
-          if (args(0).class_name () == "octave_java")
+          if (args(0).is_java ())
             {
               octave_java *jobj = TO_JAVA (args(0));
               retval(0) = box_more (current_env, jobj->to_java (), 0);
--- a/libinterp/octave-value/ov-java.h	Tue Dec 18 08:21:29 2012 -0800
+++ b/libinterp/octave-value/ov-java.h	Tue Dec 18 10:29:51 2012 -0800
@@ -140,7 +140,7 @@
   jobject to_java (void) const { return java_object; }
   jclass to_class (void) const { return java_class; }
 
-  std::string java_class_name (void) const { return java_type; }
+  std::string java_class_name (void) const { return java_classname; }
 
   octave_base_value* clone (void) const { return new octave_java (*this); }
   octave_base_value* empty_clone (void) const { return new octave_java (); }
@@ -157,7 +157,7 @@
 
   void print (std::ostream& os, bool pr_as_read_syntax = false) const
   {
-    os << "<Java object: " << java_type << ">";
+    os << "<Java object: " << java_classname << ">";
     newline(os);
   }
 
@@ -288,7 +288,7 @@
             jclass_ref clsCls (current_env, current_env->GetObjectClass (java_class));
             jmethodID mID = current_env->GetMethodID (clsCls, "getCanonicalName", "()Ljava/lang/String;");
             jobject_ref resObj (current_env, current_env->CallObjectMethod (java_class, mID));
-            java_type = jstring_to_string (current_env, resObj);
+            java_classname = jstring_to_string (current_env, resObj);
           }
       }
   }
@@ -312,15 +312,27 @@
 
 private:
 
-  DECLARE_OCTAVE_ALLOCATOR
-
-  DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
-
   jobject java_object;
 
   jclass java_class;
 
-  std::string java_type;
+  std::string java_classname;
+
+  DECLARE_OCTAVE_ALLOCATOR
+
+public:
+  int type_id (void) const { return t_id; }
+  std::string type_name (void) const { return t_name; }
+  std::string class_name (void) const { return java_classname; }
+
+  static int static_type_id (void) { return t_id; }
+  static std::string static_type_name (void) { return t_name; }
+  static std::string static_class_name (void) { return "<unknown>"; }
+  static void register_type (void);
+
+private:
+  static int t_id;
+  static const std::string t_name;
 };
 
 #endif