You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lunarium_OLD/src/internal_libs/utils/grid.h

86 lines
1.8 KiB
C

/******************************************************************************
* 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<typename T>
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<typename T>
Grid<T>::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<typename T>
T* Grid<T>::operator[](Point2Di at)
{
return &mGrid[at.X][at.Y].Data;
}
template<typename T>
T Grid<T>::GetAt(Point2Di at)
{
return mGrid[at.X][at.Y].Data;
}
template<typename T>
void Grid<T>::SetAt(Point2Di at, T value)
{
mGrid[at.X][at.Y].Data = value;
}
template<typename T>
void Grid<T>::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_