From 59e921d4538ac663b66dd08e300387afa507a971 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Wed, 17 Jan 2018 02:49:55 -0800 Subject: [PATCH] ircd::ctx: Enforce semantics on ctx::list. --- include/ircd/ctx/list.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/include/ircd/ctx/list.h b/include/ircd/ctx/list.h index d2d030206..b4e57e7b4 100644 --- a/include/ircd/ctx/list.h +++ b/include/ircd/ctx/list.h @@ -84,9 +84,34 @@ class ircd::ctx::list void remove(ctx *const & = current); list() = default; + list(list &&) noexcept; + list(const list &) = delete; + list &operator=(list &&) noexcept; + list &operator=(const list &) = delete; ~list() noexcept; }; +inline +ircd::ctx::list::list(list &&o) +noexcept +:head{std::move(o.head)} +,tail{std::move(o.tail)} +{ + o.head = nullptr; + o.tail = nullptr; +} + +inline +ircd::ctx::list & +ircd::ctx::list::operator=(list &&o) +noexcept +{ + this->~list(); + std::swap(head, o.head); + std::swap(tail, o.tail); + return *this; +} + inline ircd::ctx::list::~list() noexcept