toon-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Toon-members] TooN linoperators.hh


From: Edward Rosten
Subject: [Toon-members] TooN linoperators.hh
Date: Thu, 24 Jul 2008 21:34:28 +0000

CVSROOT:        /cvsroot/toon
Module name:    TooN
Changes by:     Edward Rosten <edrosten>        08/07/24 21:34:28

Modified files:
        .              : linoperators.hh 

Log message:
        Added some more missing operators. Is there a better way to 
        do it than this?

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/TooN/linoperators.hh?cvsroot=toon&r1=1.21&r2=1.22

Patches:
Index: linoperators.hh
===================================================================
RCS file: /cvsroot/toon/TooN/linoperators.hh,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -b -r1.21 -r1.22
--- linoperators.hh     24 Jul 2008 19:46:41 -0000      1.21
+++ linoperators.hh     24 Jul 2008 21:34:27 -0000      1.22
@@ -806,61 +806,92 @@
 }
 
 //////////////////////
-// operator +=      //
+// operator +=, -=  //
 // Matrix += Matrix //
 //////////////////////
 
-template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline
-FixedMatrix<Rows,Cols,MAccessor1>& operator += ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs,
-                                                const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){
-    for(int r=0; r<Rows; r++){
-       lhs[r] += rhs[r];
-    }
-    return lhs;
-}
-
-template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline
-FixedMatrix<Rows,Cols,MAccessor1>& operator += ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs,
-                                                const 
DynamicMatrix<MAccessor2>& rhs){
-  assert(rhs.num_rows() == Rows && rhs.num_cols() == Cols);
-  for(int r=0; r<Rows; r++){
-      lhs[r] += rhs[r];
-  }
-  return lhs;
-}
-
-
-template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline
-DynamicMatrix<MAccessor1>& operator += ( DynamicMatrix<MAccessor1>& lhs,
-                                        const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){
-  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols);
-  for(int r=0; r<Rows; r++){
-      lhs[r] += rhs[r];
-  }
-  return lhs;
-}
-
-template <class MAccessor1, class MAccessor2> inline
-DynamicMatrix<MAccessor1>& operator += ( DynamicMatrix<MAccessor1>& lhs,
-                                        const DynamicMatrix<MAccessor2>& rhs){
-  assert(lhs.num_rows() == rhs.num_rows() && lhs.num_cols() == rhs.num_cols());
-  for(int r=0; r<lhs.num_rows(); r++)
-    for(int c=0; c <lhs.num_cols(); c++)
-      lhs[r][c] += rhs[r][c];
-  return lhs;
-}
-
-template <int Rows, int Cols, class MAccessor> inline
-RefSkipMatrixRM operator += (RefSkipMatrixRM lhs, const 
FixedMatrix<Rows,Cols,MAccessor>& rhs)
-{
-  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols);
-  for(int r=0; r<Rows; r++)
-         for(int c=0; c<Cols; c++)
-      lhs[r][c] += rhs[r][c];
-  
-  return lhs;
+//fixed fixed
+//fixed dynamic
+//dynamic fixed
+//dynamic dynamic
+//RefCM fixed
+//RefCM dynamic
+//RefRM fixed
+//RefRM dynamic
+
+#define TOON_MAKE_ELEMENT_OPS(OP) \
+ \
+template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline 
FixedMatrix<Rows,Cols,MAccessor1>& operator OP ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs, const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){ \
+    for(int r=0; r<Rows; r++) \
+               lhs[r] OP rhs[r]; \
+    return lhs; \
+} \
+\
+template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline 
FixedMatrix<Rows,Cols,MAccessor1>& operator OP ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs, const DynamicMatrix<MAccessor2>& rhs){ \
+  assert(rhs.num_rows() == Rows && rhs.num_cols() == Cols); \
+  for(int r=0; r<Rows; r++) \
+      lhs[r] OP rhs[r]; \
+  return lhs; \
+} \
+ \
+template <int Rows, int Cols, class MAccessor1, class MAccessor2> inline 
DynamicMatrix<MAccessor1>& operator OP ( DynamicMatrix<MAccessor1>& lhs, const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){ \
+  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols); \
+  for(int r=0; r<Rows; r++){ \
+      lhs[r] OP rhs[r]; \
+  } \
+  return lhs; \
+} \
+ \
+template <class MAccessor1, class MAccessor2> inline 
DynamicMatrix<MAccessor1>& operator OP ( DynamicMatrix<MAccessor1>& lhs, const 
DynamicMatrix<MAccessor2>& rhs){ \
+  assert(lhs.num_rows() == rhs.num_rows() && lhs.num_cols() == 
rhs.num_cols()); \
+  for(int r=0; r<lhs.num_rows(); r++) \
+    for(int c=0; c <lhs.num_cols(); c++) \
+      lhs[r][c] OP rhs[r][c]; \
+  return lhs; \
+} \
+ \
+template <int Rows, int Cols, class MAccessor> inline RefSkipMatrixRM operator 
OP (RefSkipMatrixRM lhs, const FixedMatrix<Rows,Cols,MAccessor>& rhs) \
+{ \
+  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols); \
+  for(int r=0; r<Rows; r++) \
+         for(int c=0; c<Cols; c++) \
+                 lhs[r][c] OP rhs[r][c]; \
+   \
+  return lhs; \
+} \
+ \
+template <class MAccessor> inline RefSkipMatrixRM operator OP (RefSkipMatrixRM 
lhs, const DynamicMatrix<MAccessor>& rhs) \
+{ \
+  assert(lhs.num_rows() == rhs.num_rows() && lhs.num_cols() == 
rhs.num_cols()); \
+  for(int r=0; r < lhs.num_rows(); r++) \
+         for(int c=0; c< lhs.num_cols(); c++) \
+      lhs[r][c] OP rhs[r][c]; \
+   \
+  return lhs; \
+} \
+ \
+ \
+template <int Rows, int Cols, class MAccessor> inline RefSkipMatrixCM operator 
OP (RefSkipMatrixCM lhs, const FixedMatrix<Rows,Cols,MAccessor>& rhs) { \
+  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols); \
+  for(int r=0; r<Rows; r++) \
+         for(int c=0; c<Cols; c++) \
+      lhs[r][c] OP rhs[r][c]; \
+   \
+  return lhs; \
+} \
+ \
+template <class MAccessor> inline RefSkipMatrixCM operator OP (RefSkipMatrixCM 
lhs, const DynamicMatrix<MAccessor>& rhs) \
+{ \
+  assert(lhs.num_rows() == rhs.num_rows() && lhs.num_cols() == 
rhs.num_cols()); \
+  for(int r=0; r < lhs.num_rows(); r++) \
+         for(int c=0; c< lhs.num_cols(); c++) \
+      lhs[r][c] OP rhs[r][c]; \
+   \
+  return lhs; \
 }
 
+TOON_MAKE_ELEMENT_OPS(+=)
+TOON_MAKE_ELEMENT_OPS(-=)
 
 
 
@@ -934,59 +965,6 @@
                   DynamicMatrix<RHAccessor> > >());
 }
 
-//////////////////////
-// operator -=      //
-// Matrix -= Matrix //
-//////////////////////
-
-template <int Rows, int Cols, class MAccessor1, class MAccessor2>
-FixedMatrix<Rows,Cols,MAccessor1>& operator -= ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs,
-                                                const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){
-  for(int r=0; r<Rows; r++){
-    for(int c=0; c<Cols; c++){
-      lhs(r,c)-=rhs(r,c);
-    }
-  }
-  return lhs;
-}
-
-template <int Rows, int Cols, class MAccessor1, class MAccessor2>
-FixedMatrix<Rows,Cols,MAccessor1>& operator -= ( 
FixedMatrix<Rows,Cols,MAccessor1>& lhs,
-                                                const 
DynamicMatrix<MAccessor2>& rhs){
-  assert(rhs.num_rows == Rows && rhs.num_cols() == Cols);
-  for(int r=0; r<Rows; r++){
-    for(int c=0; c<Cols; c++){
-      lhs(r,c)-=rhs(r,c);
-    }
-  }
-  return lhs;
-}
-
-
-template <int Rows, int Cols, class MAccessor1, class MAccessor2>
-DynamicMatrix<MAccessor1>& operator -= ( DynamicMatrix<MAccessor1>& lhs,
-                                        const 
FixedMatrix<Rows,Cols,MAccessor2>& rhs){
-  assert(lhs.num_rows() == Rows && lhs.num_cols() == Cols);
-  for(int r=0; r<Rows; r++){
-    for(int c=0; c<Cols; c++){
-      lhs(r,c)-=rhs(r,c);
-    }
-  }
-  return lhs;
-}
-
-template <class MAccessor1, class MAccessor2>
-DynamicMatrix<MAccessor1>& operator -= ( DynamicMatrix<MAccessor1>& lhs,
-                                        const DynamicMatrix<MAccessor2>& rhs){
-  assert(lhs.num_rows() == rhs.num_rows() && lhs.num_cols() == rhs.num_cols());
-  for(int r=0; r<lhs.num_rows(); r++){
-    for(int c=0; c<lhs.num_cols(); c++){
-      lhs(r,c)-=rhs(r,c);
-    }
-  }
-  return lhs;
-}
-
 /////////////////////
 // operator *      //
 // Matrix * Matrix //




reply via email to

[Prev in Thread] Current Thread [Next in Thread]