Next version of JABA
[jabaws.git] / binaries / src / clustalw / src / general / SquareMat.h
1
2 /**
3  * Author: Mark Larkin
4  * 
5  * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.  
6  */
7 #include<iostream>
8 #include <vector>
9 #include <iomanip>
10 namespace clustalw
11 {
12 using namespace std;
13
14 template <class T>
15 class SquareMat
16 {
17 public:
18    SquareMat():m_dimRow(0), m_dimCol(0){;}
19    SquareMat(int size) 
20    {
21        m_dimRow = size;
22        m_dimCol = size;
23        for (int i=0; i < size; i++)
24        {
25            vector<T> x(size);
26            int y = x.size();
27            m_2DVector.push_back(x);
28        }
29    }
30    void SetAt(int nRow, int nCol, const T& value)
31    {
32        m_2DVector[nRow][nCol] = value;
33    }
34    T GetAt(int nRow, int nCol) 
35    {
36        return m_2DVector[nRow][nCol];
37    }
38    void GrowRow(int newSize) 
39    {
40        if (newSize <= m_dimRow)
41            return;
42        m_dimRow = newSize;
43        for(int i = 0 ; i < newSize - m_dimCol; i++)   
44        {
45            vector<T> x(m_dimRow);
46            m_2DVector.push_back(x);
47        }
48    }
49    void GrowCol(int newSize) 
50    {
51        if(newSize <= m_dimCol)
52            return;
53        m_dimCol = newSize;
54        for (int i=0; i <m_dimRow; i++)
55            m_2DVector[i].resize(newSize);
56    }
57    
58    void ResizeRect(int size)
59    {
60        GrowRow(size);
61        GrowCol(size);
62    }
63
64    int getSize()
65    {
66        return m_dimRow;
67    }
68
69    void clearArray()
70    {
71        int size = m_2DVector.size();
72        for(int i = 0; i < size; i++)
73        {
74            m_2DVector[i].clear();
75        }
76        m_2DVector.clear();
77        m_dimRow = 0;
78        m_dimCol = 0;
79        
80    }
81          
82    void printArray()
83    {
84        for(int row=0; row < m_dimRow; row++)
85        {
86            for(int col=0; col < m_dimCol; col++)
87            {
88                cout << setprecision(20) << " "<< m_2DVector[row][col];  
89            }
90            cout<<"\n";
91        }
92    }
93    
94    vector<T>& operator[](int x)    
95    {
96        return m_2DVector[x];
97    }
98    
99 private:
100    vector< vector <T> > m_2DVector;
101    unsigned int m_dimRow;
102    unsigned int m_dimCol;
103 };
104
105 }
106