#ifndef _SITEM_H
#define _SITEM_H

//////////////////////////////////////////////////////////////////////
//
// sitem.h: template for the SingleList Item class.
//
//////////////////////////////////////////////////////////////////////


template <class T> class CSingleItem
{
public:
    CSingleItem (void);
    CSingleItem (T);
    CSingleItem (T, CSingleItem<T> *);
    ~CSingleItem (void);
    void SetNext (CSingleItem<T> *);
    CSingleItem<T> * GetNext ();
    BOOL IsSame (T&);
    T GetData (void);

private:
    T m_Data;
    CSingleItem<T> *m_Next;
};



//////////////////////////////////////////////////////////////////////
// Template for CSIngleItem
//////////////////////////////////////////////////////////////////////

template <class T>
CSingleItem<T>::CSingleItem(void)
               : m_Data(NULL), m_Next(NULL)
{
}

template <class T>
CSingleItem<T>::CSingleItem(T item)
               : m_Data(item), m_Next(NULL)
{
}

template <class T>
CSingleItem<T>::CSingleItem(T item, CSingleItem<T>* next)
               : m_Data(item), m_Next(next)
{
}

template <class T>
CSingleItem<T>::~CSingleItem(void)
{
    if (m_Data) {
        delete (m_Data);
    }
}

template <class T>
void CSingleItem<T>::SetNext (CSingleItem<T> *item)
{
    m_Next = item;
}

template <class T>
CSingleItem<T> * CSingleItem<T>::GetNext (void )
{
    return m_Next;
}

template <class T>
T CSingleItem<T>::GetData (void )
{
    return m_Data;
}


template <class T>
BOOL CSingleItem<T>::IsSame (T &item)
{
    return m_Data->Compare (item) == 0;

}

#endif