/*++

Copyright (c) 1998  Microsoft Corporation
All rights reserved.

Module Name:

    dnode.inl

Abstract:

    Node template class.

Author:

    Weihai Chen  (WeihaiC) 06/29/98

Revision History:

--*/


template <class T, class KEYTYPE>
TDoubleNode<T, KEYTYPE>::TDoubleNode(void):
    m_Data(NULL), 
    m_pPrev(NULL),
    m_Next(NULL)
{
}

template <class T, class KEYTYPE>
TDoubleNode<T, KEYTYPE>::TDoubleNode(T item):
    m_Data(item), 
    m_pPrev(NULL),
    m_pNext(NULL)
{
}

template <class T, class KEYTYPE>
TDoubleNode<T, KEYTYPE>::TDoubleNode(T item, TDoubleNode<T, KEYTYPE>* pPrev, TDoubleNode<T, KEYTYPE>* pNext):
    m_Data(item),
    m_pPrev(pPrev),
    m_pNext(pNext)
{
}

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

template <class T, class KEYTYPE>
void 
TDoubleNode<T, KEYTYPE>::SetNext (TDoubleNode<T, KEYTYPE> *pNode)
{
    m_pNext = pNode;
}

template <class T, class KEYTYPE>
TDoubleNode<T, KEYTYPE> * 
TDoubleNode<T, KEYTYPE>::GetNext (void )
{
    return m_pNext;
}

template <class T, class KEYTYPE>
void 
TDoubleNode<T, KEYTYPE>::SetPrev (
    TDoubleNode<T, KEYTYPE> *pNode)
{
    m_pPrev = pNode;
}

template <class T, class KEYTYPE>
TDoubleNode<T, KEYTYPE> * TDoubleNode<T, KEYTYPE>::GetPrev (void )
{
    return m_pPrev;
}

template <class T, class KEYTYPE>
T TDoubleNode<T, KEYTYPE>::GetData (void )
{
    return m_Data;  
}

template <class T, class KEYTYPE>
void TDoubleNode<T, KEYTYPE>::SetData (T pData)
{
    m_Data = pData;
}


template <class T, class KEYTYPE>
BOOL TDoubleNode<T, KEYTYPE>::IsSameItem (T &item)
{
    return m_Data->Compare (item) == 0;

}

template <class T, class KEYTYPE>
BOOL TDoubleNode<T, KEYTYPE>::IsSameKey (KEYTYPE &key)
{
    return m_Data->Compare (key) == 0;

}