#include "hashstring.h" #include "hashtable.h" #include "liststring.h" #include "list.h" #include "keystring.h" ////////////////////////////////////////////////////////////////////////////// // CHashString Class // CHashString::CHashString() { m_pCHashTable = NULL; } CHashString::~CHashString() { Uninit(); } BOOL CHashString::Init(INT_32 uiBuckets/* = 127*/) { ASSERT( m_pCHashTable == NULL ); m_pCHashTable = new CHashTable, VOID*, CKeyString>; ASSERT( m_pCHashTable != NULL ); return ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->Init(uiBuckets); } VOID CHashString::Uninit() { if ( m_pCHashTable != NULL ) { delete (CHashTable, VOID*, CKeyString>*)m_pCHashTable; m_pCHashTable = NULL; } } VOID *CHashString::Insert(VOID *pvData, const CHAR *pcKey) { CKeyString key; ASSERT( m_pCHashTable != NULL ); key.Set(pcKey); return ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->Insert(pvData, key); } VOID *CHashString::Peek(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCHashTable != NULL ); key.Set(pcKey); return ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->Peek(key); } VOID *CHashString::Remove(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCHashTable != NULL ); key.Set(pcKey); return ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->Remove(key); } VOID *CHashString::RemoveFirst() { ASSERT( m_pCHashTable != NULL ); return ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->RemoveFirst(); } VOID CHashString::Display() { ASSERT( m_pCHashTable != NULL ); ((CHashTable, VOID*, CKeyString>*)m_pCHashTable)->Display(); } ////////////////////////////////////////////////////////////////////////////// // CListString Class // CListString::CListString() { m_pCList = NULL; } CListString::~CListString() { Uninit(); } BOOL CListString::Init() { ASSERT( m_pCList == NULL ); m_pCList = new CList; ASSERT( m_pCList != NULL ); return ((CList*)m_pCList)->Init(); } VOID CListString::Uninit() { if ( m_pCList != NULL ) { delete (CList*)m_pCList; m_pCList = NULL; } } VOID *CListString::InsertForward(VOID *pvData, const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->InsertForward(pvData, key); } VOID *CListString::InsertBackward(VOID *pvData, const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->InsertBackward(pvData, key); } VOID *CListString::InsertFirst(VOID *pvData, const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->InsertFirst(pvData, key); } VOID *CListString::InsertLast(VOID *pvData, const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->InsertLast(pvData, key); } VOID *CListString::RemoveForward(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->RemoveForward(key); } VOID *CListString::RemoveBackward(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->RemoveBackward(key); } VOID *CListString::RemoveFirst(const CHAR **ppcKey/* = NULL*/) { VOID *pvData; ASSERT( m_pCList != NULL ); if ( ppcKey == NULL ) { pvData = ((CList*)m_pCList)->RemoveFirst(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CList*)m_pCList)->RemoveFirst(&key); *ppcKey = key.Get(); } return pvData; } VOID *CListString::RemoveLast(const CHAR **ppcKey/* = NULL*/) { VOID *pvData; ASSERT( m_pCList != NULL ); if ( ppcKey == NULL ) { pvData = ((CList*)m_pCList)->RemoveLast(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CList*)m_pCList)->RemoveLast(&key); *ppcKey = key.Get(); } return pvData; } VOID CListString::RemoveAll() { ASSERT( m_pCList != NULL ); ((CList*)m_pCList)->RemoveAll(); } VOID *CListString::PeekForward(const CHAR *pcKey) const { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->PeekForward(key); } VOID *CListString::PeekBackward(const CHAR *pcKey) const { CKeyString key; ASSERT( m_pCList != NULL ); key.Set(pcKey); return ((CList*)m_pCList)->PeekBackward(key); } VOID *CListString::PeekFirst(const CHAR **ppcKey/* = NULL*/) const { VOID *pvData; ASSERT( m_pCList != NULL ); if ( ppcKey == NULL ) { pvData = ((CList*)m_pCList)->PeekFirst(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CList*)m_pCList)->PeekFirst(&key); *ppcKey = key.Get(); } return pvData; } VOID *CListString::PeekLast(const CHAR **ppcKey/* = NULL*/) const { VOID *pvData; ASSERT( m_pCList != NULL ); if ( ppcKey == NULL ) { pvData = ((CList*)m_pCList)->PeekLast(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CList*)m_pCList)->PeekLast(&key); *ppcKey = key.Get(); } return pvData; } VOID CListString::Display() { ASSERT( m_pCList != NULL ); ((CList*)m_pCList)->Display(); } #ifdef SORT_ENABLED BOOL CListString::Sort() { ASSERT( m_pCList != NULL ); return ((CList*)m_pCList)->Sort(); } #endif // SORT_ENABLED UINT_32 CListString::GetLength() { ASSERT( m_pCList != NULL ); return ((CList*)m_pCList)->GetLength(); } ////////////////////////////////////////////////////////////////////////////// // CListIterString Class // CListIterString::CListIterString() { m_pCListIter = NULL; } CListIterString::~CListIterString() { Uninit(); } BOOL CListIterString::Init(CListString *pCListString) { ASSERT( pCListString != NULL ); if ( m_pCListIter == NULL ) { m_pCListIter = new CListIter; ASSERT( m_pCListIter != NULL ); } return ((CListIter*)m_pCListIter)-> Init((CList*)(pCListString->m_pCList)); } VOID CListIterString::Uninit() { if ( m_pCListIter != NULL ) { delete (CListIter*)m_pCListIter; m_pCListIter = NULL; } } VOID *CListIterString::PeekForward(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCListIter != NULL ); key.Set(pcKey); return ((CListIter*)m_pCListIter)->PeekForward(key); } VOID *CListIterString::PeekBackward(const CHAR *pcKey) { CKeyString key; ASSERT( m_pCListIter != NULL ); key.Set(pcKey); return ((CListIter*)m_pCListIter)->PeekBackward(key); } VOID *CListIterString::PeekFirst(const CHAR **ppcKey/* = NULL */) { VOID *pvData; ASSERT( m_pCListIter != NULL ); if ( ppcKey == NULL ) { pvData = ((CListIter*)m_pCListIter)->PeekFirst(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CListIter*)m_pCListIter)->PeekFirst(&key); *ppcKey = key.Get(); } return pvData; } VOID *CListIterString::PeekNext(const CHAR **ppcKey/* = NULL*/) { VOID *pvData; ASSERT( m_pCListIter != NULL ); if ( ppcKey == NULL ) { pvData = ((CListIter*)m_pCListIter)->PeekNext(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CListIter*)m_pCListIter)->PeekNext(&key); *ppcKey = key.Get(); } return pvData; } VOID *CListIterString::PeekLast(const CHAR **ppcKey/* = NULL */) { VOID *pvData; ASSERT( m_pCListIter != NULL ); if ( ppcKey == NULL ) { pvData = ((CListIter*)m_pCListIter)->PeekLast(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CListIter*)m_pCListIter)->PeekLast(&key); *ppcKey = key.Get(); } return pvData; } VOID *CListIterString::PeekPrev(const CHAR **ppcKey/* = NULL*/) { VOID *pvData; ASSERT( m_pCListIter != NULL ); if ( ppcKey == NULL ) { pvData = ((CListIter*)m_pCListIter)->PeekPrev(NULL); } else { CKeyString key; key.SetNull(); pvData = ((CListIter*)m_pCListIter)->PeekPrev(&key); *ppcKey = key.Get(); } return pvData; }