new file: LSListItem.h new file: LSMacros.h modified: LSString.h modified: LSString.vcxproj new file: LSVector.h modified: main.cpp
106 lines
No EOL
1.9 KiB
C++
106 lines
No EOL
1.9 KiB
C++
#pragma once
|
|
#include "LSMacros.h"
|
|
#include "LSListItem.h"
|
|
|
|
template <class T>
|
|
|
|
class LSList
|
|
{
|
|
public:
|
|
LSList()
|
|
{
|
|
}
|
|
|
|
~LSList()
|
|
{
|
|
DELETE_ARRAY(m_pFirst)
|
|
DELETE_ARRAY(m_pLast)
|
|
}
|
|
|
|
LSListItem<T>* Append(T tObj)
|
|
{
|
|
LSListItem<T>* pNewLast;
|
|
if (!m_pFirst)
|
|
{
|
|
m_pFirst = new LSListItem<T>(tObj);
|
|
m_pLast = new LSListItem<T>(tObj);
|
|
m_pFirst->pNext = m_pLast;
|
|
pNewLast = m_pFirst;
|
|
}
|
|
else
|
|
{
|
|
pNewLast = new LSListItem<T>(tObj);
|
|
if (m_pLast->pBefore)
|
|
{
|
|
LSListItem<T>* pCurrentLast = m_pLast;
|
|
pCurrentLast->pNext = pNewLast;
|
|
pNewLast->pBefore = pCurrentLast;
|
|
}
|
|
else
|
|
{
|
|
m_pFirst->pNext = pNewLast;
|
|
pNewLast->pBefore = m_pFirst;
|
|
}
|
|
m_pLast = pNewLast;
|
|
}
|
|
m_zSize++;
|
|
return pNewLast;
|
|
}
|
|
|
|
LSListItem<T>* Remove(T tObj)
|
|
{
|
|
if (m_zSize == 0) return nullptr;
|
|
|
|
LSListItem<T>* pItemToRemove = m_pFirst;
|
|
|
|
while (pItemToRemove->tValue != tObj)
|
|
{
|
|
pItemToRemove = pItemToRemove->pNext;
|
|
}
|
|
|
|
LSListItem<T>* pRet = nullptr;
|
|
|
|
if (m_zSize <= 1)
|
|
{
|
|
m_pFirst = nullptr;
|
|
m_pLast = nullptr;
|
|
}
|
|
else if (pItemToRemove == m_pFirst)
|
|
{
|
|
LSListItem<T>* pNewFirst = pItemToRemove->pNext;
|
|
pNewFirst->pBefore = nullptr;
|
|
m_pFirst = pNewFirst;
|
|
pRet = pNewFirst;
|
|
}
|
|
else if (pItemToRemove == m_pLast)
|
|
{
|
|
LSListItem<T>* pNewLast = pItemToRemove->pBefore;
|
|
pNewLast->pNext = nullptr;
|
|
m_pLast = pNewLast;
|
|
pRet = pNewLast;
|
|
}
|
|
else
|
|
{
|
|
LSListItem<T>* pBefore = pItemToRemove->pBefore;
|
|
LSListItem<T>* pNext = pItemToRemove->pNext;
|
|
pBefore->pNext = pNext;
|
|
pNext->pBefore = pBefore;
|
|
pRet = pNext;
|
|
}
|
|
|
|
DELETE_POINTER(pItemToRemove);
|
|
m_zSize--;
|
|
return pRet;
|
|
}
|
|
|
|
T* RemoveAt(size_t zPos)
|
|
{
|
|
|
|
}
|
|
|
|
private:
|
|
LSListItem<T>* m_pFirst = nullptr;
|
|
LSListItem<T>* m_pLast = nullptr;
|
|
|
|
size_t m_zSize = 0;
|
|
}; |