//******************************************************************
// IMPLEMENTATION FILE (dynarray.cpp)
// This file implements the DynArray class member functions
//******************************************************************
#include "dynarray.h"
#include
#include // For NULL
#include // For exit()
using namespace std;
// Private members of class:
// int* arr; Pointer to array on free store
// int size; Size of array
//******************************************************************
DynArray::DynArray( /* in */ int arrSize )
// Constructor
// Precondition:
// arrSize is assigned
// Postcondition:
// IF arrSize >= 1 && There is room on free store
// New array of size arrSize is created on free store
// && arr == base address of new array
// && size == arrSize
// && arr[0..size-1] == 0
// ELSE
// Program has halted with error message
{
int i; // Array index
if (arrSize < 1)
{
cout << "** In DynArray constructor, invalid size: "
<< arrSize << " **" << endl;
exit(1);
}
size = arrSize;
arr = new int[size];
for (i = 0; i < size; i++)
arr[i] = 0;
}
//******************************************************************
DynArray::DynArray( const DynArray& array2 )
// Copy-constructor
// Postcondition:
// IF there is room on free store
// New array of size array2.size is created on free store
// && arr == base address of new array
// && size == array2.size
// && arr[0..size-1] == array2.arr[0..size-1]
// ELSE
// Program has halted with error message
{
int i; // Array index
size = array2.size;
arr = new int[size];
for (i = 0; i < size; i++)
arr[i] = array2.arr[i];
}
//******************************************************************
DynArray::~DynArray()
// Destructor
// Postcondition:
// Array pointed to by arr is no longer on the free store
{
delete [] arr;
}
//******************************************************************
int DynArray::ValueAt( /* in */ int i ) const
// Precondition:
// i is assigned
// Postcondition:
// IF i >= 0 && i < size
// Function value == arr[i]
// ELSE
// Program has halted with error message
{
if (i < 0 || i >= size)
{
cout << "** In ValueAt function, invalid index: "
<< i << " **" << endl;
exit(1);
}
return arr[i];
}
//******************************************************************
void DynArray::Store( /* in */ int val,
/* in */ int i )
// Precondition:
// val and i are assigned
// Postcondition:
// IF i >= 0 && i < size
// arr[i] == val
// ELSE
// Program has halted with error message
{
if (i < 0 || i >= size)
{
cout << "** In Store function, invalid index: "
<< i << " **" << endl;
exit(1);
}
arr[i] = val;
}
//******************************************************************
void DynArray::CopyFrom( /* in */ DynArray array2 )
// Postcondition:
// Array pointed to by arr@entry is no longer on free store
// && IF free store has room for an array of size array2.size
// New array of size array2.size is created on free store
// && arr == base address of new array
// && size == array2.size
// && arr[0..size-1] == array2.arr[0..size-1]
// ELSE
// Program has halted with error message
{
int i; // Array index
delete [] arr;
size = array2.size;
arr = new int[size];
for (i = 0; i < size; i++)
arr[i] = array2.arr[i];
}