/* * Tensor2.h * @brief Rank 2 Tensor based on http://www.gps.caltech.edu/~walter/FTensor/FTensor.pdf * Created on: Feb 10, 2010 * @author: Frank Dellaert */ #pragma once #include namespace tensors { /** Rank 2 Tensor */ template class Tensor2 { protected: Tensor1 T[N2]; public: /** default constructor */ Tensor2() { } /* construct from data */ Tensor2(const double data[N2][N1]) { for (int j = 0; j < N2; j++) T[j] = Tensor1 (data[j]); } /** construct from expression */ template Tensor2(const Tensor2Expression , Index >& a) { for (int j = 0; j < N2; j++) T[j] = a(j); } const double & operator()(int i, int j) const { return T[j](i); } double & operator()(int i, int j) { return T[j](i); } /** convert to expression */ template Tensor2Expression , Index< N2, J> > operator()(Index i, Index j) const { return Tensor2Expression , Index > (*this); } }; } // namespace tensors