From 5c44082b772b00ef7bb23e882ae64325d047828d Mon Sep 17 00:00:00 2001 From: Max Kellermann <mk@cm4all.com> Date: Wed, 13 Sep 2023 08:54:48 +0200 Subject: [PATCH] util/IntrusiveForwardList: add non-static insert_after() implementation --- src/util/IntrusiveForwardList.hxx | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/util/IntrusiveForwardList.hxx b/src/util/IntrusiveForwardList.hxx index 82e200317..5bd643c7f 100644 --- a/src/util/IntrusiveForwardList.hxx +++ b/src/util/IntrusiveForwardList.hxx @@ -317,9 +317,10 @@ public: ++counter; } - static iterator insert_after(iterator pos, reference t) noexcept { - // no counter update in this static method - static_assert(!constant_time_size); + static iterator insert_after(iterator pos, reference t) noexcept + requires(!constant_time_size) { + /* if we have no counter, then this method is allowed + to be static */ auto &pos_node = *pos.cursor; auto &new_node = ToNode(t); @@ -328,6 +329,15 @@ public: return &new_node; } + iterator insert_after(iterator pos, reference t) noexcept { + auto &pos_node = *pos.cursor; + auto &new_node = ToNode(t); + new_node.next = pos_node.next; + pos_node.next = &new_node; + ++counter; + return &new_node; + } + void erase_after(iterator pos) noexcept { pos.cursor->next = pos.cursor->next->next; --counter;