diff liboctave/Sparse-op-defs.h @ 5429:2042301733ce

[project @ 2005-08-25 12:21:24 by dbateman]
author dbateman
date Thu, 25 Aug 2005 12:21:24 +0000
parents 4c8a2e4e0717
children b4cfbb0ec8c4
line wrap: on
line diff
--- a/liboctave/Sparse-op-defs.h	Tue Aug 23 18:38:28 2005 +0000
+++ b/liboctave/Sparse-op-defs.h	Thu Aug 25 12:21:24 2005 +0000
@@ -1603,6 +1603,67 @@
 	} \
     }
 
+#define SPARSE_FULL_MUL( RET_TYPE, EL_TYPE ) \
+  octave_idx_type nr = m.rows (); \
+  octave_idx_type nc = m.cols (); \
+  \
+  octave_idx_type a_nr = a.rows (); \
+  octave_idx_type a_nc = a.cols (); \
+  \
+  if (nc != a_nr) \
+    { \
+      gripe_nonconformant ("operator *", nr, nc, a_nr, a_nc); \
+      return RET_TYPE (); \
+    } \
+  else \
+    { \
+      RET_TYPE retval (nr, a_nc, EL_TYPE ()); \
+      \
+      for (octave_idx_type i = 0; i < a_nc ; i++) \
+	{ \
+	  for (octave_idx_type j = 0; j < a_nr; j++) \
+	    { \
+              OCTAVE_QUIT; \
+	      \
+              EL_TYPE tmpval = a.elem(j,i); \
+	      for (octave_idx_type k = m.cidx(j) ; k < m.cidx(j+1); k++) \
+	        retval.elem (m.ridx(k),i) += tmpval * m.data(k); \
+	    } \
+        } \
+      return retval; \
+    }
+
+#define FULL_SPARSE_MUL( RET_TYPE, EL_TYPE ) \
+  octave_idx_type nr = m.rows (); \
+  octave_idx_type nc = m.cols (); \
+  \
+  octave_idx_type a_nr = a.rows (); \
+  octave_idx_type a_nc = a.cols (); \
+  \
+  if (nc != a_nr) \
+    { \
+      gripe_nonconformant ("operator *", nr, nc, a_nr, a_nc); \
+      return RET_TYPE (); \
+    } \
+  else \
+    { \
+      RET_TYPE retval (nr, a_nc, EL_TYPE ()); \
+      \
+      for (octave_idx_type i = 0; i < a_nc ; i++) \
+	{ \
+	   for (octave_idx_type j = a.cidx(i); j < a.cidx(i+1); j++) \
+	     { \
+	        octave_idx_type col = a.ridx(j); \
+	        EL_TYPE tmpval = a.data(j); \
+                OCTAVE_QUIT; \
+	        \
+	        for (octave_idx_type k = 0 ; k < nr; k++) \
+	          retval.elem (k,i) += tmpval * m.elem(k,col); \
+	    } \
+        } \
+      return retval; \
+    }
+
 #endif
 
 /*