mirror of
https://github.com/jakcron/nstool.git
synced 2024-12-22 10:45:28 +00:00
[fnd] Add List<T> template class.
This commit is contained in:
parent
f59068088d
commit
1515c56d2f
91
lib/fnd/List.h
Normal file
91
lib/fnd/List.h
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#pragma once
|
||||||
|
#include <fnd/types.h>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace fnd
|
||||||
|
{
|
||||||
|
template <class T>
|
||||||
|
class List
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
List() :
|
||||||
|
mElements()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
List(const T* elements, size_t num) :
|
||||||
|
mElements(num)
|
||||||
|
{
|
||||||
|
initList(elements, num);
|
||||||
|
}
|
||||||
|
|
||||||
|
// assignment operator
|
||||||
|
const List& operator=(const List& other)
|
||||||
|
{
|
||||||
|
mElements.clear();
|
||||||
|
for (size_t i = 0; i < other.getSize(); i++)
|
||||||
|
{
|
||||||
|
mElements.push_back(other[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
// comparision operator
|
||||||
|
bool operator==(const List& other) const
|
||||||
|
{
|
||||||
|
if (other.getSize() != this->getSize())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < this->getSize(); i++)
|
||||||
|
{
|
||||||
|
if (getElement(i) != other[i])
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator!=(const List& other) const
|
||||||
|
{
|
||||||
|
return !operator==(other);
|
||||||
|
}
|
||||||
|
|
||||||
|
// access operators
|
||||||
|
const T& getElement(size_t index) const
|
||||||
|
{
|
||||||
|
return mElements[index];
|
||||||
|
}
|
||||||
|
T& getElement(size_t index)
|
||||||
|
{
|
||||||
|
if (index == mElements.size()) mElements.push_back(T());
|
||||||
|
return mElements[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
const T& operator[](size_t index) const { return getElement(index); }
|
||||||
|
T& operator[](size_t index) { return getElement(index); }
|
||||||
|
const T& atBack() const { return getElement(getSize() - 1); }
|
||||||
|
T& atBack() { return getElement(getSize() - 1); }
|
||||||
|
|
||||||
|
// functions
|
||||||
|
void addElement(const T& element) { mElements.push_back(element); }
|
||||||
|
size_t getSize() const { return mElements.size(); }
|
||||||
|
void clear() { mElements.clear(); }
|
||||||
|
private:
|
||||||
|
std::vector<T> mElements;
|
||||||
|
|
||||||
|
void initList(T* elements, size_t num)
|
||||||
|
{
|
||||||
|
mElements.clear();
|
||||||
|
for (size_t i = 0; i < num; i++)
|
||||||
|
{
|
||||||
|
mElements.push_back(elements[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -118,6 +118,7 @@
|
||||||
<ClInclude Include="elf.h" />
|
<ClInclude Include="elf.h" />
|
||||||
<ClInclude Include="exception.h" />
|
<ClInclude Include="exception.h" />
|
||||||
<ClInclude Include="io.h" />
|
<ClInclude Include="io.h" />
|
||||||
|
<ClInclude Include="List.h" />
|
||||||
<ClInclude Include="memory_blob.h" />
|
<ClInclude Include="memory_blob.h" />
|
||||||
<ClInclude Include="string_conv.h" />
|
<ClInclude Include="string_conv.h" />
|
||||||
<ClInclude Include="types.h" />
|
<ClInclude Include="types.h" />
|
||||||
|
|
|
@ -33,6 +33,9 @@
|
||||||
<ClInclude Include="io.h">
|
<ClInclude Include="io.h">
|
||||||
<Filter>Header Files</Filter>
|
<Filter>Header Files</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="List.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="memory_blob.cpp">
|
<ClCompile Include="memory_blob.cpp">
|
||||||
|
|
Loading…
Reference in a new issue