1 #ifndef SIGNALS_DETAIL_CONNECTION_IMPL_BASE_HPP
2 #define SIGNALS_DETAIL_CONNECTION_IMPL_BASE_HPP
20 auto const lock = std::lock_guard{other.mtx_};
21 blocking_object_count_ = other.blocking_object_count_;
26 auto const lock = std::lock_guard{other.mtx_};
27 blocking_object_count_ = std::move(other.blocking_object_count_);
33 auto lhs_lock = std::unique_lock{this->mtx_, std::defer_lock};
34 auto rhs_lock = std::unique_lock{rhs.mtx_, std::defer_lock};
35 std::lock(lhs_lock, rhs_lock);
36 blocking_object_count_ = rhs.blocking_object_count_;
44 auto lhs_lock = std::unique_lock{this->mtx_, std::defer_lock};
45 auto rhs_lock = std::unique_lock{rhs.mtx_, std::defer_lock};
46 std::lock(lhs_lock, rhs_lock);
47 blocking_object_count_ = std::move(rhs.blocking_object_count_);
53 virtual void disconnect() = 0;
55 virtual auto connected()
const ->
bool = 0;
57 auto blocked()
const ->
bool
59 auto const lock = std::lock_guard{mtx_};
60 return blocking_object_count_ < 1 ? false :
true;
65 auto const lock = std::lock_guard{mtx_};
66 ++blocking_object_count_;
71 auto const lock = std::lock_guard{mtx_};
72 --blocking_object_count_;
76 std::size_t blocking_object_count_ = 0;
78 mutable std::mutex mtx_;
82 #endif // SIGNALS_DETAIL_CONNECTION_IMPL_BASE_HPP