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
This commit is contained in:
parent
6e22717a81
commit
4f9b04c049
7 changed files with 194 additions and 26 deletions
106
LSString/LSList.h
Normal file
106
LSString/LSList.h
Normal file
|
@ -0,0 +1,106 @@
|
|||
#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;
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue