[Top][All Lists]
[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 //