66 lines
1.2 KiB
C
66 lines
1.2 KiB
C
|
#ifndef ARRAY2D_H__
|
||
|
#define ARRAY2D_H__
|
||
|
|
||
|
#include "define.h"
|
||
|
|
||
|
template <class T>
|
||
|
class Array2d
|
||
|
{
|
||
|
public:
|
||
|
Array2d(int x, int y);
|
||
|
~Array2d();
|
||
|
Array2d(const Array2d& array);
|
||
|
|
||
|
void Set(int x, int y, T type);
|
||
|
T Get(int x, int y) const;
|
||
|
|
||
|
void Reset(T type);
|
||
|
|
||
|
private:
|
||
|
int To1dIndex(int x, int y) const;
|
||
|
|
||
|
private:
|
||
|
int m_x, m_y;
|
||
|
T* m_array;
|
||
|
};
|
||
|
|
||
|
template <class T>
|
||
|
Array2d<T>::Array2d(int x, int y) : m_x(x), m_y(y) {
|
||
|
m_array = new T[m_x * m_y];
|
||
|
|
||
|
Reset(BTYPE_AIR);
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
Array2d<T>::~Array2d() { delete[] m_array; }
|
||
|
|
||
|
template <class T>
|
||
|
Array2d<T>::Array2d(const Array2d<T>& array) : m_x(array.m_x), m_y(array.m_y) {
|
||
|
m_array = new BlockType[m_x * m_y];
|
||
|
for (int i = 0; i < m_x * m_y; ++i)
|
||
|
m_array[i] = array.m_array[i];
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
void Array2d<T>::Set(int x, int y, T type) {
|
||
|
m_array[To1dIndex(x, y)] = type;
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
T Array2d<T>::Get(int x, int y) const {
|
||
|
return m_array[To1dIndex(x, y)];
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
void Array2d<T>::Reset(T type) {
|
||
|
for (int i = 0; i < m_x * m_y; ++i)
|
||
|
m_array[i] = type;
|
||
|
}
|
||
|
|
||
|
template <class T>
|
||
|
int Array2d<T>::To1dIndex(int x, int y) const {
|
||
|
return x + (y * m_x);
|
||
|
}
|
||
|
|
||
|
#endif // ARRAY2D_H__
|