Mac binaries
[jabaws.git] / website / archive / binaries / mac / src / clustalw / src / general / Array2D.h
diff --git a/website/archive/binaries/mac/src/clustalw/src/general/Array2D.h b/website/archive/binaries/mac/src/clustalw/src/general/Array2D.h
new file mode 100644 (file)
index 0000000..9c61502
--- /dev/null
@@ -0,0 +1,141 @@
+/**
+ * Author: Mark Larkin
+ * 
+ * Copyright (c) 2007 Des Higgins, Julie Thompson and Toby Gibson.  
+ */
+#ifndef ARRAY2D_H
+#define ARRAY2D_H
+
+#include<iostream>
+#include <vector>
+namespace clustalw
+{
+
+using namespace std;
+
+template <class T>
+class Array2D
+{
+public:
+   Array2D():m_dimRow(0), m_dimCol(0){;}
+   Array2D(int nRow, int nCol) 
+   {
+       m_dimRow = nRow;
+       m_dimCol = nCol;
+       for (int i=0; i < nRow; i++)
+       {
+           vector<T> x(nCol);
+           int y = x.size();
+           m_2DVector.push_back(x);
+       }
+   }
+   
+   int getRowSize()
+   {
+       return m_dimRow;
+   }
+   
+   int getColSize()
+   {
+       return m_dimCol;
+   }
+   
+   void SetAt(int nRow, int nCol, const T& value)
+   {
+       m_2DVector[nRow][nCol] = value;
+   }
+   T GetAt(int nRow, int nCol) 
+   {
+       return m_2DVector[nRow][nCol];
+   }
+   void GrowRow(int newSize) 
+   {
+       if (newSize <= (int)m_dimRow)
+           return;
+       m_dimRow = newSize;
+       for(int i = 0 ; i < newSize - (int)m_dimCol; i++)   
+       {
+           vector<T> x(m_dimRow);
+           m_2DVector.push_back(x);
+       }
+   }
+   void GrowCol(int newSize) 
+   {
+       if(newSize <= (int)m_dimCol)
+           return;
+       m_dimCol = newSize;
+       for (int i=0; i < (int)m_dimRow; i++)
+           m_2DVector[i].resize(newSize);
+   }
+   
+   void ResizeRect(int row, int col)
+   {
+       GrowRow(row);
+       GrowCol(col);
+   }
+
+   /* This is to get everything initialised to a value */
+   void GrowRow(int newSize, const T& value) 
+   {
+       if (newSize <= m_dimRow)
+           return;
+       m_dimRow = newSize;
+       for(int i = 0 ; i < newSize - m_dimCol; i++)   
+       {
+           vector<T> x(m_dimRow, value);
+           m_2DVector.push_back(x);
+       }
+   }
+   void GrowCol(int newSize, const T& value) 
+   {
+       if(newSize <= m_dimCol)
+           return;
+       m_dimCol = newSize;
+       for (int i=0; i <m_dimRow; i++)
+           m_2DVector[i].resize(newSize, value);
+   }
+   
+   void ResizeRect(int row, int col, const T& value)
+   {
+       GrowRow(row, value);
+       GrowCol(col, value);
+   }   
+      
+   void printArray()
+   {
+       for(int row=0; row < m_dimRow; row++)
+       {
+           for(int col=0; col < m_dimCol; col++)
+           {
+               cout <<" "<< m_2DVector[row][col];  
+           }
+           cout<<"\n";
+       }
+   }
+   
+   void clearArray()
+   {
+       int size = m_2DVector.size();
+       for(int i = 0; i < size; i++)
+       {
+           m_2DVector[i].clear();
+       }
+       m_2DVector.clear();
+       m_dimRow = 0;
+       m_dimCol = 0;
+       
+   }
+   
+   vector<T>& operator[](int x)    
+   {
+       return m_2DVector[x];
+   }
+private:
+   vector< vector <T> > m_2DVector;
+   unsigned int m_dimRow;
+   unsigned int m_dimCol;
+};
+
+}
+#endif
+