// © Copyright1995, Joseph Bergin.  All rights reserved. 

#ifndef __2DimensionArray__
#define __2DimensionArray__

#include "Error.h"
#include <stdlib.h>
#include <iostream.h>
#include "Array.h" 

// Implement two dimensional arrays.  The subscript operator is ( , ) or [][].  Array2s
// are fixed size (at time of creation).  They do not expand dynamically.  This could be
// changed--See Array.h. 

template <class T>
class Array2{
	public:
	// constructors
		Array2	// unintialized cells
		(	unsigned int i = ArrayDefaultLength,
			unsigned int j = ArrayDefaultLength
		)
		:	_elements(i,Array<T>(j))
		{ 	
		}
		
		Array2		// initialized cells
		(	unsigned int i,
			unsigned int j,
			const T& t
		)
		:	_elements(i,Array<T>(j))
		{ 	for(i=0;i<_elements.length(); i++)
				for(j = 0; j<_elements[i].length(); j++)
					_elements[i][j] = t;
		}
		
	// access	
		T& cell(unsigned int i, unsigned int j) // returns an element
		{	return _elements[i][j];
		}
		
		T& operator()(unsigned int i, unsigned int j) // returns an element
		{	return _elements[i][j];
		}
		
		Array<T> & operator[](unsigned int i) // returns a row
		{	return _elements[i];
		}
		
	private:
		Array< Array <T> > _elements; // Array of arrays
};


#endif

