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 "mv_vector_TYPE.h"
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(TYPE*, int m, int n, MV_Matrix_::ref_type i);
00079 MV_ColMat_TYPE(TYPE*, int m, int n, int lda,
00080 MV_Matrix_::ref_type i);
00081
00082 MV_ColMat_TYPE(const MV_ColMat_TYPE&);
00083 ~MV_ColMat_TYPE();
00084
00085
00086
00087
00088
00089 inline TYPE& operator()( int, int);
00090 inline const TYPE& operator()( int, int) const;
00091 MV_ColMat_TYPE operator()(const MV_VecIndex &I, const MV_VecIndex &J) ;
00092 const MV_ColMat_TYPE operator()(const MV_VecIndex &I, const MV_VecIndex &J) const;
00093 int size(int i) const;
00094 MV_ColMat_TYPE& newsize( int, int);
00095 int ref() const { return ref_;}
00096
00097
00098
00099
00100
00101 MV_ColMat_TYPE & operator=(const MV_ColMat_TYPE&);
00102 MV_ColMat_TYPE & operator=(const TYPE&);
00103
00104
00105 friend std::ostream& operator<<(std::ostream &s, const MV_ColMat_TYPE &A);
00106
00107 };
00108
00109 inline TYPE& MV_ColMat_TYPE::operator()( int i, int j)
00110 {
00111 #ifdef MV_MATRIX_BOUNDS_CHECK
00112 assert(0<=i && i<size(0));
00113 assert(0<=j && j<size(1));
00114 #endif
00115 return v_(j*lda_ + i);
00116
00117 }
00118
00119 inline const TYPE& MV_ColMat_TYPE::operator()
00120 ( int i, int j) const
00121 {
00122 #ifdef MV_MATRIX_BOUNDS_CHECK
00123 assert(0<=i && i<size(0));
00124 assert(0<=j && j<size(1));
00125 #endif
00126 return v_(j*lda_ + i);
00127 }
00128
00129 inline MV_ColMat_TYPE::MV_ColMat_TYPE(TYPE* d, int m, int n,
00130 MV_Matrix_::ref_type i ):
00131 v_(d,m*n, MV_Vector_::ref), dim0_(m), dim1_(n), lda_(m), ref_(i) {}
00132
00133 inline MV_ColMat_TYPE::MV_ColMat_TYPE(TYPE* d, int m, int n,
00134 int lda, MV_Matrix_::ref_type i) :
00135 v_(d, lda*n, MV_Vector_::ref), dim0_(m), dim1_(n), lda_(lda),
00136 ref_(i) {}
00137
00138 #endif
00139