Remove unused code.

This commit is contained in:
Matthew Parkinson
2022-03-18 14:55:31 +00:00
committed by Matthew Parkinson
parent a3c8abc3c3
commit 6ad7f65d19
3 changed files with 0 additions and 263 deletions

View File

@@ -1,209 +0,0 @@
#pragma once
#include "address.h"
#include "helpers.h"
#include "invalidptr.h"
#include "ptrwrap.h"
#include <cstdint>
#include <type_traits>
namespace snmalloc
{
template<
class T,
template<typename> typename Ptr = Pointer,
class Terminator = std::nullptr_t,
void on_clear(Ptr<T>) = ignore<T, Ptr>>
class DLList final
{
private:
static_assert(
std::is_same<decltype(T::prev), Ptr<T>>::value,
"T->prev must be a Ptr<T>");
static_assert(
std::is_same<decltype(T::next), Ptr<T>>::value,
"T->next must be a Ptr<T>");
Ptr<T> head = Terminator();
Ptr<T> tail = Terminator();
public:
~DLList()
{
clear();
}
DLList() = default;
DLList(DLList&& o) noexcept
{
head = o.head;
tail = o.tail;
o.head = nullptr;
o.tail = nullptr;
}
DLList& operator=(DLList&& o) noexcept
{
head = o.head;
tail = o.tail;
o.head = nullptr;
o.tail = nullptr;
return *this;
}
SNMALLOC_FAST_PATH bool is_empty()
{
return head == Terminator();
}
SNMALLOC_FAST_PATH Ptr<T> get_head()
{
return head;
}
Ptr<T> get_tail()
{
return tail;
}
SNMALLOC_FAST_PATH Ptr<T> pop()
{
Ptr<T> item = head;
if (item != Terminator())
remove(item);
return item;
}
Ptr<T> pop_tail()
{
Ptr<T> item = tail;
if (item != Terminator())
remove(item);
return item;
}
void insert(Ptr<T> item)
{
debug_check_not_contains(item);
item->next = head;
item->prev = Terminator();
if (head != Terminator())
head->prev = item;
else
tail = item;
head = item;
if constexpr (DEBUG)
debug_check();
}
void insert_back(Ptr<T> item)
{
debug_check_not_contains(item);
item->prev = tail;
item->next = Terminator();
if (tail != Terminator())
tail->next = item;
else
head = item;
tail = item;
debug_check();
}
SNMALLOC_FAST_PATH void remove(Ptr<T> item)
{
debug_check_contains(item);
if (item->next != Terminator())
item->next->prev = item->prev;
else
tail = item->prev;
if (item->prev != Terminator())
item->prev->next = item->next;
else
head = item->next;
debug_check();
}
void clear()
{
while (head != nullptr)
{
auto c = head;
remove(c);
on_clear(c);
}
}
void debug_check_contains(Ptr<T> item)
{
if constexpr (DEBUG)
{
debug_check();
Ptr<T> curr = head;
while (curr != item)
{
SNMALLOC_ASSERT(curr != Terminator());
curr = curr->next;
}
}
else
{
UNUSED(item);
}
}
void debug_check_not_contains(Ptr<T> item)
{
if constexpr (DEBUG)
{
debug_check();
Ptr<T> curr = head;
while (curr != Terminator())
{
SNMALLOC_ASSERT(curr != item);
curr = curr->next;
}
}
else
{
UNUSED(item);
}
}
void debug_check()
{
if constexpr (DEBUG)
{
Ptr<T> item = head;
Ptr<T> prev = Terminator();
while (item != Terminator())
{
SNMALLOC_ASSERT(item->prev == prev);
prev = item;
item = item->next;
}
}
}
};
} // namespace snmalloc

View File

@@ -1,53 +0,0 @@
#pragma once
#include "address.h"
namespace snmalloc
{
/**
* Invalid pointer class. This is similar to `std::nullptr_t`, but allows
* other values.
*/
template<address_t Sentinel>
struct InvalidPointer
{
/**
* Equality comparison. Two invalid pointer values with the same sentinel
* are always the same, invalid pointer values with different sentinels are
* always different.
*/
template<address_t OtherSentinel>
constexpr bool operator==(const InvalidPointer<OtherSentinel>&)
{
return Sentinel == OtherSentinel;
}
/**
* Equality comparison. Two invalid pointer values with the same sentinel
* are always the same, invalid pointer values with different sentinels are
* always different.
*/
template<address_t OtherSentinel>
constexpr bool operator!=(const InvalidPointer<OtherSentinel>&)
{
return Sentinel != OtherSentinel;
}
/**
* Implicit conversion, creates a pointer with the value of the sentinel.
* On CHERI and other provenance-tracking systems, this is a
* provenance-free integer and so will trap if dereferenced, on other
* systems the sentinel should be a value in unmapped memory.
*/
template<typename T>
operator T*() const
{
return reinterpret_cast<T*>(Sentinel);
}
/**
* Implicit conversion to an address, returns the sentinel value.
*/
operator address_t() const
{
return Sentinel;
}
};
} // namespace snmalloc

View File

@@ -1,6 +1,5 @@
#pragma once
#include "../ds/dllist.h"
#include "../ds/helpers.h"
#include "../ds/seqset.h"
#include "../mem/remoteallocator.h"