Site hosted by Angelfire.com: Build your free website today!
// 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++] = &el;
}

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;
}