#ifndef TENSOR2D_H
#define TENSOR2D_H
#include <utility>
template<typename T>
class Tensor2D {
	private:
		int r;
		int c;
		T** data;
	public:
		//Constructor
		Tensor2D(int rows, int columns);
		//Copy constructor
		Tensor2D(const Tensor2D& other);
		//Assingment operator
		Tensor2D& operator=(const Tensor2D& other);
		//Destructor
		~Tensor2D();
		//Set element
		void set(int row, int col,  T& value);
		T get(int row, int col) const;
		//Access operator
		T& operator()(int row, int col);
		T& operator()(int row, int col) const;
		//Shape
		std::pair<int,int> shape() const;
		int rows() const;
		int cols() const;

		T* operator[](int row);
		T* operator[](int row) const;
		//Print tensor
		void print(void);
};

#endif
