12 inline HepSymMatrix::HepSymMatrix()
13 : m(0), nrow(0), size_(0)
16 inline int HepSymMatrix::num_row()
const {
return nrow;}
17 inline int HepSymMatrix::num_col()
const {
return nrow;}
18 inline int HepSymMatrix::num_size()
const {
return size_;}
20 inline double & HepSymMatrix::fast(
int row,
int col)
22 #ifdef MATRIX_BOUND_CHECK 23 if(row<1||row>num_row() || col<1||col>num_col())
24 error(
"Range error in HepSymMatrix::fast()");
26 return *(m.begin()+(row*(row-1))/2+(col-1));
28 inline const double & HepSymMatrix::fast(
int row,
int col)
const 30 #ifdef MATRIX_BOUND_CHECK 31 if(row<1||row>num_row() || col<1||col>num_col())
32 error(
"Range error in HepSymMatrix::fast()");
34 return *(m.begin()+(row*(row-1))/2+(col-1));
37 inline double & HepSymMatrix::operator()(
int row,
int col)
38 {
return (row>=col? fast(row,col) : fast(col,row));}
39 inline const double & HepSymMatrix::operator()(
int row,
int col)
const 40 {
return (row>=col? fast(row,col) : fast(col,row));}
42 inline void HepSymMatrix::assign(
const HepSymMatrix &hm2)
45 inline HepSymMatrix HepSymMatrix::T()
const {
return HepSymMatrix(*
this);}
47 inline HepSymMatrix::HepSymMatrix_row HepSymMatrix::operator[] (
int r)
48 #ifdef HEP_GNU_OPTIMIZED_RETURN 53 HepSymMatrix_row b(*
this,r);
58 inline HepSymMatrix::HepSymMatrix_row_const HepSymMatrix::operator[] (
int r)
const 59 #ifdef HEP_GNU_OPTIMIZED_RETURN 64 const HepSymMatrix_row_const b(*
this,r);
69 inline double &HepSymMatrix::HepSymMatrix_row::operator[](
int c)
71 #ifdef MATRIX_BOUND_CHECK 72 if(_r<0||_r>=_a.nrow || c<0||c>=_a.nrow)
73 error(
"Range error in HepSymMatrix::operator[][]");
76 return *(_a.m.begin() + (_r+1)*_r/2 + c);
78 return *(_a.m.begin() + (c+1)*c/2 + _r);
83 HepSymMatrix::HepSymMatrix_row_const::operator[](
int c)
const 85 #ifdef MATRIX_BOUND_CHECK 86 if(_r<0||_r>=_a.nrow || c<0||c>=_a.nrow)
87 error(
"Range error in HepSymMatrix::operator[][]");
90 return *(_a.m.begin() + (_r+1)*_r/2 + c);
92 return *(_a.m.begin() + (c+1)*c/2 + _r);
96 inline HepSymMatrix::HepSymMatrix_row::HepSymMatrix_row(HepSymMatrix &a,
101 inline HepSymMatrix::HepSymMatrix_row_const::HepSymMatrix_row_const
102 (
const HepSymMatrix&a,
int r)
106 inline HepSymMatrix HepSymMatrix::inverse(
int &ifail)
const 107 #ifdef HEP_GNU_OPTIMIZED_RETURN 112 HepSymMatrix mTmp(*
this);
118 inline HepSymMatrix HepSymMatrix::inverse()
const {
120 HepSymMatrix mt=inverse(ierr);
121 if (ierr)
throw std::runtime_error(
"Error in HepSymMatrix inversion");
125 inline void HepSymMatrix::invert() {
128 if (ierr)
throw std::runtime_error(
"Error in HepSymMatrix inversion");