Listing 2: Set.cpp: Implementation of Set template class
//
// Developed by Jim Beveridge, May, 1997
//
#include <stdlib.h>
#include "Set.h"
// Use explicit instantiation to create the various
// versions of the template that will be used by the
// rest of the program.
template Set<int>;
template Set<double>;
//////////////////////////////////////////////////////
// template class Set function implementations
//////////////////////////////////////////////////////
template<class T>
Set<T>::Set()
{
m_Values = NULL;
m_Count = 0;
}
template<class T>
Set<T>::~Set()
{
Empty();
}
template<class T>
void Set<T>::Add(const T& val)
{
// Don't add if a duplicate
if (!Lookup(val))
{
// Growth size of one is extremely inefficient,
// but works for illustration purposes.
T* pT = new T[m_Count+1];
for (int i=0;i<m_Count;i++)
pT[i] = m_Values[i];
delete [] m_Values;
m_Values = pT;
pT[m_Count++] = val;
}
}
template<class T>
bool Set<T>::Lookup(const T& val) const
{
for (int i=0;i<m_Count;i++)
if ( m_Values[i] == val )
return true;
return false;
}
template<class T>
Set<T>& Set<T>::operator= (const Set<T>& s)
{
Empty();
m_Values = new T[s.m_Count];
for (int i=0;i<s.m_Count;i++)
m_Values[i] = s.m_Values[i];
m_Count = s.m_Count;
return *this;
}
template<class T>
void Set<T>::Empty()
{
delete [] m_Values;
m_Values = NULL;
m_Count = 0;
}
//End of File