#ifndef MESH_HPP
#define MESH_HPP

#include <Kokkos_Core.hpp>
#include <TinyVector.hpp>

template <typename ConnectivityType>
class Mesh
{
public:
  typedef ConnectivityType Connectivity;
  static constexpr size_t dimension = ConnectivityType::dimension;
  typedef TinyVector<dimension> Rd;

private:
  const Connectivity& m_connectivity;
  Kokkos::View<Rd*> m_xr;

public:

  const Connectivity& connectivity() const
  {
    return m_connectivity;
  }

  const size_t& numberOfNodes() const
  {
    return m_connectivity.numberOfNodes();
  }

  const size_t& numberOfFaces() const
  {
    return m_connectivity.numberOfFaces();
  }

  const size_t& numberOfCells() const
  {
    return m_connectivity.numberOfCells();
  }

  #warning PASSER CES NOUVEAUX VECTEURS EN CONST
  Kokkos::View<Rd*> xr() const
  {
    return m_xr;
  }

  Mesh(const Connectivity& connectivity)
    : m_connectivity(connectivity),
      m_xr("xr", connectivity.numberOfNodes())
  {
    const double delta_x = 1./connectivity.numberOfCells();
    Kokkos::parallel_for(connectivity.numberOfNodes(), KOKKOS_LAMBDA(const int& r){
	m_xr[r][0] = r*delta_x;
      });
  }

  ~Mesh()
  {
    ;
  }
};

#endif // MESH_HPP