diff src/ov-fcn-handle.cc @ 10322:21551cc88061

improve function handles comparison
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 15 Feb 2010 07:13:12 +0100
parents 97b4bd6f0925
children 89f4d7e294cc
line wrap: on
line diff
--- a/src/ov-fcn-handle.cc	Sat Feb 13 08:17:21 2010 +0100
+++ b/src/ov-fcn-handle.cc	Mon Feb 15 07:13:12 2010 +0100
@@ -171,6 +171,25 @@
   return retval;
 }
 
+bool 
+octave_fcn_handle::is_equal_to (const octave_fcn_handle& h) const
+{
+  bool retval = fcn.is_copy_of (h.fcn) && (has_overloads == h.has_overloads);
+  retval = retval && (overloads.size () == h.overloads.size ());
+
+  if (retval && has_overloads)
+    {
+      for (int i = 0; i < btyp_num_types && retval; i++)
+        retval = builtin_overloads[i].is_copy_of (h.builtin_overloads[i]);
+
+      str_ov_map::const_iterator iter = overloads.begin (), hiter = h.overloads.begin ();
+      for (; iter != overloads.end () && retval; iter++, hiter++)
+        retval = (iter->first == hiter->first) && (iter->second.is_copy_of (hiter->second));
+    }
+
+  return retval;
+}
+
 bool
 octave_fcn_handle::set_fcn (const std::string &octaveroot, 
                             const std::string& fpath)
@@ -1453,7 +1472,6 @@
         }
     }
 
-  bool handle_ok = false;
   octave_value f = symbol_table::find_function (tnm, octave_value_list (),
                                                 local_funcs);
   octave_function *fptr = f.function_value (true);