// MyPointers.cpp
/* Defines functions in MyPointers.h
Crystal Torres
Section 1MA3C
*/
// ---------------------
#include "MyPointers.h"
template <class T>
MyPointers<T>::MyPointers() {
size = 0;
capacity = 10;
pointers = new T*[capacity];
}
template <class T>
MyPointers<T>::MyPointers(int c) {
size = 0;
capacity = c;
pointers = new T*[capacity];
}
template <class T>
MyPointers<T>::MyPointers(const MyPointers<T>& mp) {
size = mp.size;
capacity = mp.capacity;
pointers = new T*[capacity];
for (int i = 0; i < size; i++)
pointers[i] = mp.pointers[i];
}
template <class T>
MyPointers<T>::~MyPointers() {
delete [] pointers;
}
template <class T>
bool MyPointers<T>::operator == (const MyPointers<T>& mp) const {
if (size != mp.size)
return false;
for (int i = 0; i < size; i++) {
if (*(pointers[i]) != *(mp.pointers[i]))
return false;
}
return true;
}
template <class T>
MyPointers<T>& MyPointers<T>::operator = (const MyPointers<T>& mp) {
if (this == mp)
return *this;
delete pointers;
size = mp.size;
capacity = mp.capacity;
pointers = new T*[capacity];
for (int i = 0; i < size; i++)
pointers[i] = mp.pointers[i];
return *this;
}
template <class T>
T* MyPointers<T>::operator [] (int pos) const throw (NotFound) {
if ((pos >= size) || (pos < 0))
throw NotFound(pos);
return pointers[pos];
}
template <class T>
void MyPointers<T>::insert (T& el) {
if (size >= capacity)
grow();
pointers[size++] = ⪙
}
template <class T>
void MyPointers<T>::remove (T& element) throw (NotFound) {
int pos = find(element);
size--;
for (int i = pos; i < size; i++)
pointers[i] = pointers[i+1];
}
template <class T>
int MyPointers<T>::find(const T& element) const throw (NotFound) {
for (int i = 0; i < size; i++)
if (element == (*(pointers[i])))
return i;
throw NotFound();
}
template <class T>
void MyPointers<T>::grow() {
capacity*=2;
T** temp = new T*[capacity];
for (int i = 0; i < size; i++)
temp[i] = pointers[i];
delete [] pointers;
pointers = temp;
}