The DejaVU Framework -- hush 3.1

include: professional-program-11-GridSpecialization-GridString.h /cygdrive/d/www/media


- [up] [top] - index make include source logic grammar scripts html configure mx slides talks scenes reports projects
<body bgcolor="#FFFFFF" text="#000000">

// #includes for working with the C-style strings.
include 
include 
using namespace std;

// When the template specialization is used, the original template must be visible // too. #including it here ensures that it will always be visible when this
// specialization is visible.
include <Grid.h>

template <>
>
<h4 align=right text=red>.html> Grid<char*></h4><hr>
  class Grid
{
 public:
  Grid(int inWidth = kDefaultWidth, int inHeight = kDefaultHeight);
  Grid(const Grid& src);
  ~Grid();
  Grid& operator=(const Grid& rhs);

  void setElementAt(int x, int y, const char* inElem);
  char* 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& src);

  char*** mCells;
  int mWidth, mHeight;
};
<hr>


const int Grid::kDefaultWidth;
const int Grid::kDefaultHeight;

Grid::Grid(int inWidth, int inHeight) :
  mWidth(inWidth), mHeight(inHeight)
{
  mCells = new char** [mWidth];
  for (int i = 0; i < mWidth; i++) {
    mCells[i] = new char* [mHeight];
    for (int j = 0; j < mHeight; j++) {
      mCells[i][j] = NULL;
    }
  }
}

Grid::Grid(const Grid& src)
{
  copyFrom(src);
}

Grid::~Grid()
{
  // free the old memory
  for (int i = 0; i < mWidth; i++) {
    for (int j = 0; j < mHeight; j++) {
      delete [] mCells[i][j];
    }
    delete [] mCells[i];
  }
  delete [] mCells;
}

void Grid::copyFrom(const Grid& src)
{
  int i, j;
  mWidth = src.mWidth;
  mHeight = src.mHeight;

  mCells = new char** [mWidth];
  for (i = 0; i < mWidth; i++) {
    mCells[i] = new char* [mHeight];
  }

  for (i = 0; i < mWidth; i++) {
    for (j = 0; j < mHeight; j++) {
      if (src.mCells[i][j] == NULL) {
        mCells[i][j] = NULL;
      } else {
        mCells[i][j] = new char[strlen(src.mCells[i][j]) + 1];
        strcpy(mCells[i][j], src.mCells[i][j]);
      }
    }
  }
}

Grid& Grid::operator=(const Grid& rhs)
{
  int i, j;

  // check for self-assignment
  if (this == &rhs) {
    return (*this);
  }
  // free the old memory
  for (i = 0; i < mWidth; i++) {
    for (j = 0; j < mHeight; j++) {
      delete [] mCells[i][j];
    }
    delete [] mCells[i];
  }
  delete [] mCells;

  // copy the new memory
  copyFrom(rhs);

  return (*this);
}

void Grid::setElementAt(int x, int y, const char* inElem)
{
  delete [] mCells[x][y];
  if (inElem == NULL) {
    mCells[x][y] = NULL;
  } else {
    mCells[x][y] = new char[strlen(inElem) + 1];
    strcpy(mCells[x][y], inElem);
  }
}

char* Grid::getElementAt(int x, int y) const
{
  if (mCells[x][y] == NULL) {
    return (NULL);
  }
  char* ret = new char[strlen(mCells[x][y]) + 1];
  strcpy(ret, mCells[x][y]);

  return (ret);
}
<hr> <style type="text/css"> div.mainnavigate { margin: 20px 2px; /* background-color: #ffffff; */ border: 1px solid black; } </style> <div class=xnavigate> [] <black>readme</black> course(s) preface <black>I</black> 1 2 <black>II</black> 3 4 <black>III</black> 5 6 7 <black>IV</black> 8 9 10 <black>V</black> 11 12 afterthought(s) <black>appendix</black> reference(s) example(s) <black>resource(s)</black> _ </div> <hr>

(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. </div> <script src="http://www.google-analytics.com/urchin.js" type="text/javascript"> </script> <script type="text/javascript"> _uacct = "UA-2780434-1"; urchinTracker(); </script> </body> </html> <hr> <hr> <table cellpadding=10> <tr> <td> <address> Hush Online Technology </address> hush@cs.vu.nl <br>10/19/08 </td><td> </td> <td></td><td></td><td></td><td></td><td></td><td></td><td></td> <td> </td> </tr> </table>