/****************************************************************************** * File - grid.h * Author - Joey Pollack * Date - 2022/01/25 (y/m/d) * Mod Date - 2022/01/25 (y/m/d) * Description - A 2D fixed-size array of data. Size must be set when * this container is created and can not be changed later. ******************************************************************************/ #ifndef GRID_H_ #define GRID_H_ #include "types.h" namespace lunarium { template class Grid { public: Grid(Sizei size); T* operator[](Point2Di at); T GetAt(Point2Di at); void SetAt(Point2Di at, T value); void SetAll(T value); private: struct Node { T Data; }; Sizei mSize; Node** mGrid; }; //////////////////////////////////////////////////////////// // IMPLEMENTATION //////////////////////////////////////////////////////////// template Grid::Grid(Sizei size) : mSize(size) { mGrid = new Node*[size.Width]; for (int i = 0; i < size.Width; i++) { mGrid[i] = new Node[size.Height]; } } template T* Grid::operator[](Point2Di at) { return &mGrid[at.X][at.Y].Data; } template T Grid::GetAt(Point2Di at) { return mGrid[at.X][at.Y].Data; } template void Grid::SetAt(Point2Di at, T value) { mGrid[at.X][at.Y].Data = value; } template void Grid::SetAll(T value) { for (int i = 0; i < mSize.Width; i++) { for (int j = 0; j < mSize.Height; j++) { mGrid[i][j].Data = value; } } } } #endif GRID_H_