/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ /* */ /* */ /* MV++ Numerical Matrix/Vector C++ Library */ /* MV++ Version 1.5 */ /* */ /* R. Pozo */ /* National Institute of Standards and Technology */ /* */ /* NOTICE */ /* */ /* Permission to use, copy, modify, and distribute this software and */ /* its documentation for any purpose and without fee is hereby granted */ /* provided that this permission notice appear in all copies and */ /* supporting documentation. */ /* */ /* Neither the Institution (National Institute of Standards and Technology) */ /* nor the author makes any representations about the suitability of this */ /* software for any purpose. This software is provided ``as is''without */ /* expressed or implied warranty. */ /* */ /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ // // mvmtp.h : basic templated numerical matrix class, storage // by columns (Fortran oriented.) // // // #ifndef _MV_MATRIX_float_H_ #define _MV_MATRIX_float_H_ #include "mvvf.h" #include "mvmrf.h" #include // for formatted printing of matrices #ifdef MV_MATRIX_BOUNDS_CHECK # include #endif class MV_ColMat_float { private: MV_Vector_float v_; int dim0_; // perferred to using dim_[2]. some compilers int dim1_; // refuse to initalize these in the constructor. int lda_; int ref_; // true if this is declared as a reference vector, // i.e. it does not own the memory space, but // rather it is a view to another vector or array. public: /*::::::::::::::::::::::::::*/ /* Constructors/Destructors */ /*::::::::::::::::::::::::::*/ MV_ColMat_float(); MV_ColMat_float(unsigned int, unsigned int); // some compilers have difficulty with inlined 'for' statements. MV_ColMat_float(unsigned int, unsigned int, const float&); // usual copy by value // (can't use default parameter lda=m, because m is not a constant...) // MV_ColMat_float(float*, unsigned int m, unsigned int n); MV_ColMat_float(float*, unsigned int m, unsigned int n, unsigned int lda); // the "reference" versions // // MV_ColMat_float(MV_ColMat_float &A, MV_Matrix_::ref_type i); MV_ColMat_float(float*, unsigned int m, unsigned int n, MV_Matrix_::ref_type i); MV_ColMat_float(float*, unsigned int m, unsigned int n, unsigned int lda, MV_Matrix_::ref_type i); MV_ColMat_float(const MV_ColMat_float&); ~MV_ColMat_float(); /*::::::::::::::::::::::::::::::::*/ /* Indices and access operations */ /*::::::::::::::::::::::::::::::::*/ inline float& operator()(unsigned int, unsigned int); inline const float& operator()(unsigned int, unsigned int) const; MV_ColMat_float operator()(const MV_VecIndex &I, const MV_VecIndex &J) ; const MV_ColMat_float operator()(const MV_VecIndex &I, const MV_VecIndex &J) const; unsigned int dim(int i) const; unsigned int lda(void) const{ return lda_; } unsigned int size(int i) const { return dim(i);} MV_ColMat_float& newsize(unsigned int, unsigned int); int ref() const { return ref_;} /*::::::::::::::*/ /* Assignment */ /*::::::::::::::*/ MV_ColMat_float & operator=(const MV_ColMat_float&); MV_ColMat_float & operator=(const float&); friend ostream& operator<<(ostream &s, const MV_ColMat_float &A); }; inline float& MV_ColMat_float::operator()(unsigned int i, unsigned int j) { #ifdef MV_MATRIX_BOUNDS_CHECK assert(0<=i && i