From 7e3ea6b0080b2c9127964a096a27369d8cc59c67 Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Sun, 26 Mar 2017 15:38:58 +0200 Subject: Rename `TorusArray` to `TorusMatrix` to better fit the represented structure --- src/util/torus_matrix.h | 52 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/util/torus_matrix.h (limited to 'src/util/torus_matrix.h') diff --git a/src/util/torus_matrix.h b/src/util/torus_matrix.h new file mode 100644 index 0000000..d09b99e --- /dev/null +++ b/src/util/torus_matrix.h @@ -0,0 +1,52 @@ +#ifndef LIFE_SRC_UTIL_TORUS_MATRIX_ +#define LIFE_SRC_UTIL_TORUS_MATRIX_ + +#include +#include + +namespace life { +namespace util { + +template< + typename TYPE, + std::size_t WIDTH, + std::size_t HEIGHT +> +class TorusMatrix { + static std::size_t toMatrixColumn(const std::ptrdiff_t x) { + if ( x >= 0 ) { + return x % WIDTH; + } else { + return WIDTH - ( std::abs(x) % WIDTH ); + } + } + + static std::size_t toMatrixRow(const std::ptrdiff_t y) { + if ( y >= 0 ) { + return y % HEIGHT; + } else { + return HEIGHT - ( std::abs(y) % HEIGHT ); + } + } + + public: + static const std::size_t width = WIDTH; + static const std::size_t height = HEIGHT; + + TYPE get(const std::ptrdiff_t x, const std::ptrdiff_t y) const { + return this->matrix_[toMatrixRow(y)][toMatrixColumn(x)]; + } + + void set(const std::ptrdiff_t x, const std::ptrdiff_t y, TYPE&& value) { + this->matrix_[toMatrixRow(y)][toMatrixColumn(x)] = value; + } + + private: + std::array, HEIGHT> matrix_; + +}; + +} +} + +#endif // LIFE_SRC_UTIL_TORUS_MATRIX_ -- cgit v1.2.3