/* Mem2.cpp  -- Overloading versus Default Arguments */

#include "Mem2.h"
#include <cstring>

using namespace std;


Mem::Mem(int sz /* = 0 */) {
  mem = 0;
  size = 0;
  if (sz) {
    ensureMinSize(sz);
  }
}


Mem::~Mem() {
  delete[] mem;
}


int Mem::msize() {
  return size;
}


void Mem::ensureMinSize(int minSize) {
  if(size < minSize) {
    byte *newmem = new byte[minSize];
    memset(newmem + size, 0, minSize - size);
    memcpy(newmem, mem, size);
    delete[] mem;
    mem = newmem;
    size = minSize;
  }
}


byte *Mem::pointer() {
  return mem;
}


byte *Mem::pointer(int minSize) {
  ensureMinSize(minSize);
  return mem;
}
