#ifndef CRS_GRAPH_HPP
#define CRS_GRAPH_HPP

#include <utils/Array.hpp>

class CRSGraph
{
 private:
  Array<const int> m_entries;
  Array<const int> m_neighbors;

 public:
  size_t
  numberOfNodes() const
  {
    Assert(m_entries.size() > 0);
    return m_entries.size() - 1;
  }

  const Array<const int>&
  entries() const
  {
    return m_entries;
  }

  const Array<const int>&
  neighbors() const
  {
    return m_neighbors;
  }

  CRSGraph& operator=(CRSGraph&&) = delete;
  CRSGraph& operator=(const CRSGraph&) = delete;

  CRSGraph(const Array<int>& entries, const Array<int>& neighbors) : m_entries(entries), m_neighbors(neighbors)
  {
    Assert(m_entries.size() > 0);
    Assert(static_cast<size_t>(m_entries[m_entries.size() - 1]) == m_neighbors.size());
  }

  CRSGraph()                = delete;
  CRSGraph(CRSGraph&&)      = delete;
  CRSGraph(const CRSGraph&) = delete;
  ~CRSGraph()               = default;
};

#endif   // CRS_GRAPH_HPP