mirror of
https://github.com/justinian/jsix.git
synced 2025-12-10 08:24:32 -08:00
[util] Add move-assignment operators to node_map, deque
Also add them to wait_queue as a wrapper to calling deque's move-assignmen operator.
This commit is contained in:
@@ -1,8 +1,20 @@
|
|||||||
|
#include <utility>
|
||||||
#include "objects/thread.h"
|
#include "objects/thread.h"
|
||||||
#include "wait_queue.h"
|
#include "wait_queue.h"
|
||||||
|
|
||||||
|
wait_queue::wait_queue(wait_queue &&other) :
|
||||||
|
m_threads {std::move(other.m_threads)} {}
|
||||||
|
|
||||||
wait_queue::~wait_queue() { clear(); }
|
wait_queue::~wait_queue() { clear(); }
|
||||||
|
|
||||||
|
wait_queue &
|
||||||
|
wait_queue::operator=(wait_queue &&other)
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
m_threads = std::move(other.m_threads);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
wait_queue::add_thread(obj::thread *t)
|
wait_queue::add_thread(obj::thread *t)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -12,6 +12,11 @@ namespace obj {
|
|||||||
class wait_queue
|
class wait_queue
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
wait_queue() = default;
|
||||||
|
wait_queue(wait_queue &&other);
|
||||||
|
|
||||||
|
wait_queue & operator=(wait_queue &&other);
|
||||||
|
|
||||||
/// Wake all threads when destructing
|
/// Wake all threads when destructing
|
||||||
~wait_queue();
|
~wait_queue();
|
||||||
|
|
||||||
@@ -28,6 +33,9 @@ public:
|
|||||||
/// \arg value The value passed to thread::wake
|
/// \arg value The value passed to thread::wake
|
||||||
void clear(uint64_t value = 0);
|
void clear(uint64_t value = 0);
|
||||||
|
|
||||||
|
/// Check if the queue is empty
|
||||||
|
bool empty() const { return m_threads.empty(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Get rid of any exited threads that are next
|
/// Get rid of any exited threads that are next
|
||||||
/// in the queue. Caller must hold the queue lock.
|
/// in the queue. Caller must hold the queue lock.
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
/// \file linked_list.h
|
/// \file linked_list.h
|
||||||
/// A generic templatized linked list.
|
/// A generic templatized linked list.
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <util/linked_list.h>
|
#include <util/linked_list.h>
|
||||||
@@ -37,9 +38,23 @@ public:
|
|||||||
size_t index;
|
size_t index;
|
||||||
};
|
};
|
||||||
|
|
||||||
deque() : m_first(0), m_next(N) {}
|
deque() : m_first {0}, m_next {N} {}
|
||||||
|
|
||||||
|
deque(deque &&other) :
|
||||||
|
m_first {other.m_first},
|
||||||
|
m_next {other.m_next},
|
||||||
|
m_list {std::move(other.m_list)} {}
|
||||||
|
|
||||||
~deque() { clear(); }
|
~deque() { clear(); }
|
||||||
|
|
||||||
|
deque & operator=(deque &&other) {
|
||||||
|
clear();
|
||||||
|
m_first = other.m_first;
|
||||||
|
m_next = other.m_next;
|
||||||
|
m_list = std::move(other.m_list);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
inline void push_front(const T& item) {
|
inline void push_front(const T& item) {
|
||||||
if (!m_first) { // need a new block at the start
|
if (!m_first) { // need a new block at the start
|
||||||
node_type *n = new node_type;
|
node_type *n = new node_type;
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ public:
|
|||||||
key_type &key_at_slot = get_map_key(node_at_slot);
|
key_type &key_at_slot = get_map_key(node_at_slot);
|
||||||
|
|
||||||
if (open(key_at_slot)) {
|
if (open(key_at_slot)) {
|
||||||
node_at_slot = node;
|
node_at_slot = std::move(node);
|
||||||
if (!found)
|
if (!found)
|
||||||
inserted_at = slot;
|
inserted_at = slot;
|
||||||
return m_nodes[inserted_at];
|
return m_nodes[inserted_at];
|
||||||
|
|||||||
Reference in New Issue
Block a user