The DejaVU Framework --
hush 3.1
-
[up]
[top] -
index
make
include
source
logic
grammar
scripts
html
configure
mx
slides
talks
scenes
reports
projects
<body bgcolor="#FFFFFF" text="#000000">
// Grid.h
include
using std::vector;
using std::allocator;
template Allocator = allocator >
<h4 align=right text=red> Container</h4><hr>
class Container = vector >
<hr>
Grid</h4>
class Grid
{
public:
Grid(int inWidth = kDefaultWidth, int inHeight = kDefaultHeight);
Grid(const Grid<T, Container>& src);
~Grid();
Grid<T, Container>& operator=(const Grid<T, Container>& rhs);
void setElementAt(int x, int y, const T& inElem);
T& getElementAt(int x, int y);
const T& getElementAt(int x, int y) const;
int getHeight() const { return mHeight; }
int getWidth() const { return mWidth; }
static const int kDefaultWidth = 10;
static const int kDefaultHeight = 10;
protected:
void copyFrom(const Grid<T, Container>& src);
Container<T>* mCells;
int mWidth, mHeight;
};
template <typename T, template <typename E, typename Allocator = allocator<E> >
>
.html> Container></h4>
class Container>
Grid::Grid(int inWidth, int inHeight) :
mWidth(inWidth), mHeight(inHeight)
{
// Dynamically allocate the array of mWidth containers
mCells = new Container[mWidth];
for (int i = 0; i < mWidth; i++) {
// Resize each container so that it can hold mHeight elements.
mCells[i].resize(mHeight);
}
}
template Allocator = allocator >
>
.html> Container></h4>
class Container>
const int Grid::kDefaultWidth;
template Allocator = allocator >
>
.html> Container></h4>
class Container>
const int Grid::kDefaultHeight;
template Allocator = allocator >
>
.html> Container></h4>
class Container>
Grid::Grid(const Grid& src)
{
copyFrom(src);
}
template Allocator = allocator >
>
.html> Container></h4>
class Container>
Grid::~Grid()
{
delete [] mCells;
}
template Allocator = allocator >
>
.html> Container></h4>
class Container>
void Grid::copyFrom(const Grid& src)
{
int i, j;
mWidth = src.mWidth;
mHeight = src.mHeight;
mCells = new Container[mWidth];
for (i = 0; i < mWidth; i++) {
// Resize each element, as in the constructor.
mCells[i].resize(mHeight);
}
for (i = 0; i < mWidth; i++) {
for (j = 0; j < mHeight; j++) {
mCells[i][j] = src.mCells[i][j];
}
}
}
template Allocator = allocator >
>
.html> Container></h4>
class Container>
Grid& Grid::operator=(const Grid& rhs)
{
// check for self-assignment
if (this == &rhs) {
return (*this);
}
// free the old memory
delete [] mCells;
// copy the new memory
copyFrom(rhs);
return (*this);
}
template Allocator = allocator >
>
.html> Container></h4>
class Container>
void Grid::setElementAt(int x, int y, const T& inElem)
{
mCells[x][y] = inElem;
}
template Allocator = allocator >
>
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.
<script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
</script>
<script type="text/javascript">
_uacct = "UA-2780434-1";
urchinTracker();
</script>