Skip to content

Commit a342380

Browse files
committed
refactored the virtual dtor into a base class
1 parent 1f93330 commit a342380

File tree

4 files changed

+21
-24
lines changed

4 files changed

+21
-24
lines changed

include/beman/execution26/detail/immovable.hpp

+14-2
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,27 @@
77
// ----------------------------------------------------------------------------
88

99
namespace beman::execution26::detail {
10-
struct immovable {
10+
struct immovable;
11+
struct virtual_immovable;
12+
} // namespace beman::execution26::detail
13+
14+
struct beman::execution26::detail::immovable {
1115
constexpr immovable() = default;
1216
immovable(immovable&&) = delete;
1317
immovable(const immovable&) = delete;
1418
~immovable() = default;
1519
auto operator=(immovable&&) -> immovable& = delete;
1620
auto operator=(const immovable&) -> immovable& = delete;
1721
};
18-
} // namespace beman::execution26::detail
22+
23+
struct beman::execution26::detail::virtual_immovable {
24+
constexpr virtual_immovable() = default;
25+
virtual_immovable(virtual_immovable&&) = delete;
26+
virtual_immovable(const virtual_immovable&) = delete;
27+
virtual ~virtual_immovable() = default;
28+
auto operator=(virtual_immovable&&) -> virtual_immovable& = delete;
29+
auto operator=(const virtual_immovable&) -> virtual_immovable& = delete;
30+
};
1931

2032
// ----------------------------------------------------------------------------
2133

include/beman/execution26/detail/inplace_stop_source.hpp

+3-9
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#ifndef INCLUDED_BEMAN_EXECUTION26_DETAIL_INPLACE_STOP_SOURCE
55
#define INCLUDED_BEMAN_EXECUTION26_DETAIL_INPLACE_STOP_SOURCE
66

7+
#include <beman/execution26/detail/immovable.hpp>
78
#include <atomic>
89
#include <memory>
910
#include <mutex>
@@ -48,15 +49,8 @@ class beman::execution26::inplace_stop_token {
4849
// ----------------------------------------------------------------------------
4950

5051
class beman::execution26::inplace_stop_source {
51-
struct callback_base {
52-
callback_base() = default;
53-
callback_base(callback_base const&) = delete;
54-
callback_base(callback_base&&) = delete;
55-
virtual ~callback_base() = default;
56-
auto operator=(callback_base const&) -> callback_base& = delete;
57-
auto operator=(callback_base&&) -> callback_base& = delete;
58-
59-
callback_base* next{};
52+
struct callback_base : public ::beman::execution26::detail::virtual_immovable {
53+
callback_base* next{};
6054
virtual auto call() -> void = 0;
6155
};
6256

include/beman/execution26/detail/notify.hpp

+1-7
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,7 @@ class notifier : ::beman::execution26::detail::immovable {
2828

2929
private:
3030
friend struct impls_for<::beman::execution26::detail::notify_t>;
31-
struct base {
32-
base() = default;
33-
base(base const&) = default;
34-
base(base&&) = default;
35-
virtual ~base() = default;
36-
auto operator=(base const&) -> base& = default;
37-
auto operator=(base&&) -> base& = default;
31+
struct base : ::beman::execution26::detail::virtual_immovable {
3832
base* next{};
3933
virtual auto complete() -> void = 0;
4034
};

include/beman/execution26/detail/run_loop.hpp

+3-6
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,13 @@ class run_loop {
3737
return {this->loop};
3838
}
3939
};
40-
struct opstate_base : ::beman::execution26::detail::immovable {
41-
opstate_base() = default;
42-
opstate_base(opstate_base const&) = delete;
43-
opstate_base(opstate_base&&) = delete;
40+
41+
struct opstate_base : ::beman::execution26::detail::virtual_immovable {
4442
virtual ~opstate_base() = default;
45-
auto operator=(opstate_base const&) -> opstate_base& = delete;
46-
auto operator=(opstate_base&&) -> opstate_base& = delete;
4743
opstate_base* next{};
4844
virtual auto execute() noexcept -> void = 0;
4945
};
46+
5047
template <typename Receiver>
5148
struct opstate : opstate_base {
5249
using operation_state_concept = ::beman::execution26::operation_state_t;

0 commit comments

Comments
 (0)