Program Listing for File grid2D.hpp
↰ Return to documentation for file (rcppsw/ds/grid2D.hpp)
#pragma once
/*******************************************************************************
 * Includes
 ******************************************************************************/
#include "rcppsw/ds/base_grid2D.hpp"
/*******************************************************************************
 * Namespaces/Decls
 ******************************************************************************/
namespace rcppsw::ds {
/*******************************************************************************
 * Class Definitions
 ******************************************************************************/
template <typename T>
class grid2D : public base_grid2D<T> {
 public:
  using typename base_grid2D<T>::index_range;
  using typename base_grid2D<T>::coord_type;
  using base_grid2D<T>::access;
  explicit grid2D(const coord_type& dims) : grid2D(dims.x(), dims.y()) {}
  grid2D(size_t x_max, size_t y_max)
      : base_grid2D<T>(), m_cells(boost::extents[x_max][y_max]) {}
  T& access(size_t i, size_t j) override {
    return m_cells[static_cast<typename index_range::index>(i)]
                  [static_cast<typename index_range::index>(j)];
  }
  size_t xsize(void) const override { return m_cells.shape()[0]; }
  size_t ysize(void) const override { return m_cells.shape()[1]; }
 private:
  using typename base_grid2D<T>::grid_type;
  grid_type& grid(void) override { return m_cells; }
  const grid_type& grid(void) const override { return m_cells; }
  /* clang-format off */
  grid_type m_cells;
  /* clang-format on */
};
} /* namespace rcppsw::ds */