#ifndef ARRAY2D_H
#define	ARRAY2D_H

#include <print.h>

/*!
\brief A primitive 2D array that manages memory.

Intended to be used for accessing 2D matrix elements.
  No arithmetic support.
*/
template< typename T >
class array2D
{
public:

  uintc m;
  uintc n;

  T * arr;

  array2D(uintc m_, uintc n_)
    : m(m_), n(n_)
  {
    arr = new T[m*n];
  }

  ~array2D()
    { delete[] arr; }

  T & get(uintc i, uintc k)
    { return arr[i*n+k]; }
  T const & get(uintc i, uintc k) const
    { return arr[i*n+k]; }
};


#endif


