diff liboctave/MArray.cc @ 9557:3a1dd361f978

optimize .*=, ./= operators
author Jaroslav Hajek <highegg@gmail.com>
date Mon, 24 Aug 2009 09:45:34 +0200
parents 1beb23d2b892
children 66970dd627f6
line wrap: on
line diff
--- a/liboctave/MArray.cc	Sun Aug 23 22:00:03 2009 +0200
+++ b/liboctave/MArray.cc	Mon Aug 24 09:45:34 2009 +0200
@@ -190,6 +190,42 @@
   return a;
 }
 
+template <class T>
+MArray<T>&
+product_eq (MArray<T>& a, const MArray<T>& b)
+{
+  if (a.is_shared ())
+    return a = product (a, b);
+  octave_idx_type l = a.length ();
+  if (l > 0)
+    {
+      octave_idx_type bl = b.length ();
+      if (l != bl)
+	gripe_nonconformant ("operator .*=", l, bl);
+      else
+	DO_VV_OP2 (T, a, *=, b);
+    }
+  return a;
+}
+
+template <class T>
+MArray<T>&
+quotient_eq (MArray<T>& a, const MArray<T>& b)
+{
+  if (a.is_shared ())
+    return a = quotient (a, b);
+  octave_idx_type l = a.length ();
+  if (l > 0)
+    {
+      octave_idx_type bl = b.length ();
+      if (l != bl)
+	gripe_nonconformant ("operator ./=", l, bl);
+      else
+	DO_VV_OP2 (T, a, /=, b);
+    }
+  return a;
+}
+
 // Element by element MArray by scalar ops.
 
 #define MARRAY_AS_OP(OP) \