feat(list): add TSList::IsEmpty

This commit is contained in:
Adam Heinermann 2025-10-24 01:42:16 -07:00 committed by fallenoak
parent d590e2e94f
commit b52736a360
2 changed files with 26 additions and 0 deletions

View file

@ -30,6 +30,7 @@ class TSList {
T* DeleteNode(T* ptr);
T* Head();
void InitializeTerminator();
bool IsEmpty();
bool IsLinked(T* ptr);
TSLink<T>* Link(const T* ptr);
void LinkNode(T* ptr, uint32_t linktype, T* existingptr);
@ -96,6 +97,11 @@ void TSList<T, TGetLink>::InitializeTerminator() {
this->m_terminator.m_next = reinterpret_cast<T*>(~reinterpret_cast<uintptr_t>(&this->m_terminator));
}
template <class T, class TGetLink>
bool TSList<T, TGetLink>::IsEmpty() {
return this->Head() == nullptr;
}
template <class T, class TGetLink>
bool TSList<T, TGetLink>::IsLinked(T* ptr) {
return TGetLink::Link(ptr, this->m_linkoffset)->IsLinked();

View file

@ -19,6 +19,26 @@ TEST_CASE("TSList::Head", "[list]") {
}
}
TEST_CASE("TSList::IsEmpty", "[list]") {
SECTION("returns true if just initialized") {
STORM_LIST(TestListNode) list;
CHECK(list.IsEmpty());
}
SECTION("returns false if there are linked items") {
STORM_LIST(TestListNode) list;
list.NewNode(STORM_LIST_TAIL, 0, 0);
CHECK_FALSE(list.IsEmpty());
}
SECTION("returns true after clearing a populated list") {
STORM_LIST(TestListNode) list;
list.NewNode(STORM_LIST_TAIL, 0, 0);
list.Clear();
CHECK(list.IsEmpty());
}
}
TEST_CASE("TSList::LinkToHead", "[list]") {
SECTION("links node to head correctly") {
STORM_LIST(TestListNode) list;