Home
Code-Blog
Projects
Twitter
Blog
Links / Books
About
|
Websites |
Memory access using row x col.
template<class T> struct Array { size_t m_Rows; size_t m_Cols; T* m_p; size_t m_Capacity; void BuyMemory(size_t rows, size_t cols) { T* p = new T[rows * cols]; delete [] m_p; m_p = p; m_Capacity = rows * cols; } public: Array() : m_p(0), m_Rows(0), m_Cols(0), m_Capacity(0) { } Array(size_t rows, size_t cols) : m_p(0), m_Rows(0), m_Cols(0), m_Capacity(0) { Resize(rows, cols); } size_t Cols() const { return m_Cols; } size_t Rows() const { return m_Rows; } void Resize(size_t rows, size_t cols) { // memory changed? if (rows * cols != m_Capacity) { BuyMemory(rows, cols); } m_Rows = rows; m_Cols = cols; } void ResizeConservative(size_t rows, size_t cols) { //needs more memory? if (rows * cols > m_Capacity) { BuyMemory(rows, cols); } m_Rows = rows; m_Cols = cols; } T& At(size_t row, size_t col) { assert(row < Rows()); assert(col < Cols()); return m_p[(Rows() - 1) * row + col]; } const T& At(size_t row, size_t col) const { assert(row < Rows()); assert(col < Cols()); return m_p[(Rows() - 1) * row + col]; } };
|