source: Sophya/trunk/SophyaLib/TArray/triangmtx.h@ 1636

Last change on this file since 1636 was 1624, checked in by cmv, 24 years ago

On enleve les SetTemp() inutiles cmv 6/8/01

File size: 2.1 KB
RevLine 
[762]1// This may look like C code, but it is really -*- C++ -*-
2
3#ifndef TRIANGMTX_H_SEEN
4#define TRIANGMTX_H_SEEN
5
6#include "ndatablock.h"
7#include "pexceptions.h"
8
[926]9// doit etre mis en dehors du namespace
[920]10/*!
11 \class SOPHYA::TriangularMatrix
12 \ingroup TArray
[926]13 Class for inferior triangular matrix (base class for the class Alm)
[920]14*/
[926]15
16namespace SOPHYA {
17
18//! Class for inferior triangular matrix (base class for the class Alm)
[762]19template <class T>
[914]20class TriangularMatrix {
21public :
[762]22
[914]23//! Default constructor
[762]24TriangularMatrix() {};
[914]25//! instanciate a triangular matrix from the number of rows
[762]26TriangularMatrix(int rowSize) : long_diag_((uint_4)rowSize) {elem_.ReSize((uint_4) (rowSize*(rowSize+1)/2) ); };
[914]27//! Copy constructor (possibility of sharing datas)
[762]28TriangularMatrix(const TriangularMatrix<T>& a, bool share=false) : elem_(a.elem_, share), long_diag_(a.long_diag_) {;}
[914]29
30//! resize the matrix with a new number of rows
[762]31inline void ReSizeRow(int rowSize)
32 {
33 long_diag_=(uint_4)rowSize;
34 elem_.ReSize(long_diag_*(long_diag_+1)/2);
35 }
36
[914]37//! Equal operator
[762]38inline TriangularMatrix<T>& operator = (const TriangularMatrix<T>& a)
39{
40 elem_=a.elem_;
41 long_diag_ = a.long_diag_;
42 return *this;
43}
[914]44
45//! () operator : access to elements row \b l and column \b m
[762]46inline T& operator()(int l, int m)
47 {
48 return elem_(adr_ij(l,m));
49 }
[914]50//! () operator : access to elements row \b l and column \b m
[762]51inline T const& operator()(int l, int m) const
52 {
53 return *(elem_.Begin()+ adr_ij(l,m));
54 }
[914]55
56//! Return number of rows
57inline int_4 rowNumber() const {return (int_4)long_diag_;}
58
59private:
60//! compute the address of an element in the single array representing the matrix
[762]61inline uint_4 adr_ij(int i,int j) const
62{
[1327]63 // int adr= i*(i+1)/2+j;
[862]64 // if ( adr >= elem_.Size() || adr <0 )
65 //{
66 // cout << " attention depassement dans triangularMatrix " << endl;
67 // cout << " l= " << i << " m= " << j << " tableau reserve longueur " << elem_.Size() << endl;
68 //}
[762]69 return(i*(i+1)/2+j);
70}
71
[914]72uint_4 long_diag_; //!< size of the square matrix
73NDataBlock<T> elem_; //!< Data block
[762]74
75 };
76
77} // namespace SOPHYA
78
79#endif
Note: See TracBrowser for help on using the repository browser.