mirror of
https://github.com/usatiuk/ficus.git
synced 2025-10-29 00:27:52 +01:00
more sensible list
This commit is contained in:
@@ -13,17 +13,23 @@
|
||||
|
||||
template<typename T>
|
||||
class ListQueue {
|
||||
private:
|
||||
public:
|
||||
struct Node {
|
||||
T val;
|
||||
Node *next;
|
||||
};
|
||||
|
||||
private:
|
||||
Node *head = nullptr;
|
||||
Node *tail = nullptr;
|
||||
|
||||
public:
|
||||
ListQueue() = default;
|
||||
~ListQueue() {
|
||||
while (!empty()) {
|
||||
pop_back();
|
||||
}
|
||||
}
|
||||
|
||||
template<class... Args>
|
||||
void emplace_front(Args &&...args) {
|
||||
@@ -62,6 +68,21 @@ public:
|
||||
delete old_tail;
|
||||
}
|
||||
|
||||
Node *extract_back() {
|
||||
if (!head) return nullptr;
|
||||
|
||||
if (tail == head) {
|
||||
auto b = tail;
|
||||
tail = nullptr;
|
||||
head = nullptr;
|
||||
return b;
|
||||
}
|
||||
|
||||
auto old_tail = tail;
|
||||
tail = tail->next;
|
||||
return old_tail;
|
||||
}
|
||||
|
||||
bool empty() {
|
||||
assert((tail == nullptr) == (head == nullptr));
|
||||
return head == nullptr;
|
||||
|
||||
@@ -35,6 +35,12 @@ public:
|
||||
T &operator*() const { return *ptr; }
|
||||
|
||||
T *get() const noexcept { return ptr; }
|
||||
|
||||
T *release() noexcept {
|
||||
auto b = ptr;
|
||||
ptr = nullptr;
|
||||
return b;
|
||||
}
|
||||
|
||||
private:
|
||||
T *ptr = nullptr;
|
||||
|
||||
Reference in New Issue
Block a user