LSFramework/LSString/LSList.h
DirtyDuckEUW 4f9b04c049 new file: LSList.h
new file:   LSListItem.h
	new file:   LSMacros.h
	modified:   LSString.h
	modified:   LSString.vcxproj
	new file:   LSVector.h
	modified:   main.cpp
2021-10-18 23:58:17 +02:00

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;
};