00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef _MV_MATRIX_$TYPE_H_
00034 #define _MV_MATRIX_$TYPE_H_
00035
00036 #include "$INCLUDE"
00037 #include "mvmrf.h"
00038
00039
00040
00041 #include <sstream>
00042 #ifdef MV_MATRIX_BOUNDS_CHECK
00043 # include <assert.h>
00044 #endif
00045
00046
00047 class MV_ColMat_$TYPE
00048 {
00049 private:
00050 MV_Vector_$TYPE v_;
00051 int dim0_;
00052 int dim1_;
00053 int lda_;
00054 int ref_;
00055
00056
00057 public:
00058
00059
00060
00061
00062
00063 MV_ColMat_$TYPE();
00064 MV_ColMat_$TYPE( int, int);
00065
00066
00067 MV_ColMat_$TYPE( int, int, const $TYPE&);
00068
00069
00070
00071
00072 MV_ColMat_$TYPE($TYPE*, int m, int n);
00073 MV_ColMat_$TYPE($TYPE*, int m, int n, int lda);
00074
00075
00076
00077
00078 MV_ColMat_$TYPE(MV_ColMat_$TYPE &A, MV_Matrix_::ref_type i);
00079 MV_ColMat_$TYPE($TYPE*, int m, int n, MV_Matrix_::ref_type i);
00080 MV_ColMat_$TYPE($TYPE*, int m, int n, int lda,
00081 MV_Matrix_::ref_type i);
00082
00083 MV_ColMat_$TYPE(const MV_ColMat_$TYPE&);
00084 ~MV_ColMat_$TYPE();
00085
00086
00087
00088
00089
00090 inline $TYPE& operator()( int, int);
00091 inline const $TYPE& operator()( int, int) const;
00092 MV_ColMat_$TYPE operator()(const MV_VecIndex &I, const MV_VecIndex &J) ;
00093 const MV_ColMat_$TYPE operator()(const MV_VecIndex &I, const MV_VecIndex &J) const;
00094 int dim(int i) const;
00095 int lda(void) const{ return lda_; }
00096 int size(int i) const { return dim(i);}
00097 MV_ColMat_$TYPE& newsize( int, int);
00098 int ref() const { return ref_;}
00099
00100
00101
00102
00103
00104 MV_ColMat_$TYPE & operator=(const MV_ColMat_$TYPE&);
00105 MV_ColMat_$TYPE & operator=(const $TYPE&);
00106
00107
00108 friend std::ostream& operator<<(std::ostream &s, const MV_ColMat_$TYPE &A);
00109
00110 };
00111
00112 inline $TYPE& MV_ColMat_$TYPE::operator()( int i, int j)
00113 {
00114 #ifdef MV_MATRIX_BOUNDS_CHECK
00115 assert(0<=i && i<dim(0));
00116 assert(0<=j && j<dim(1));
00117 #endif
00118 return v_(j*lda_ + i);
00119
00120 }
00121
00122 inline const $TYPE& MV_ColMat_$TYPE::operator()
00123 ( int i, int j) const
00124 {
00125 #ifdef MV_MATRIX_BOUNDS_CHECK
00126 assert(0<=i && i<dim(0));
00127 assert(0<=j && j<dim(1));
00128 #endif
00129 return v_(j*lda_ + i);
00130 }
00131
00132 inline MV_ColMat_$TYPE::MV_ColMat_$TYPE($TYPE* d, int m,
00133 int n, MV_Matrix_::ref_type i ):
00134 v_(d,m*n, MV_Vector_::ref), dim0_(m), dim1_(n), lda_(m), ref_(i) {}
00135
00136 inline MV_ColMat_$TYPE::MV_ColMat_$TYPE( MV_ColMat_$TYPE &A,
00137 MV_Matrix_::ref_type i ):
00138 v_(&A(0,0), A.dim(0)*A.dim(1), MV_Vector_::ref),
00139 dim0_(A.dim(0)), dim1_(A.dim(1)), lda_(A.lda()), ref_(i) {}
00140
00141 inline MV_ColMat_$TYPE::MV_ColMat_$TYPE($TYPE* d, int m, int n,
00142 int lda, MV_Matrix_::ref_type i) :
00143 v_(d, lda*n, MV_Vector_::ref), dim0_(m), dim1_(n), lda_(lda),
00144 ref_(i) {}
00145
00146 #endif
00147