sandbox
Loading...
Searching...
No Matches
lockable.hpp
1// SPDX-License-Identifier: MIT
2#ifndef LIBSBX_SIGNAL_LOCKABLE_HPP_
3#define LIBSBX_SIGNAL_LOCKABLE_HPP_
4
5#include <mutex>
6
7namespace sbx::signals {
8
9template<typename Type>
10concept lockable = requires(Type& value) {
11 { value.try_lock() } -> std::same_as<bool>;
12 { value.lock() } -> std::same_as<void>;
13 { value.unlock() } -> std::same_as<void>;
14}; // concept lockable
15
16struct null_mutex {
17 null_mutex() noexcept = default;
18 null_mutex(const null_mutex& other) = delete;
19 null_mutex(null_mutex&& other) noexcept = delete;
20
21 ~null_mutex() noexcept = default;
22
23 auto operator=(const null_mutex& other) -> null_mutex& = delete;
24 auto operator=(null_mutex&& other) noexcept -> null_mutex& = delete;
25
26 inline auto try_lock() noexcept -> bool { return true; }
27 inline auto lock() noexcept -> void {}
28 inline auto unlock() noexcept -> void {}
29}; // struct null_mutex
30
31} // namespace sbx::signals
32
33#endif // LIBSBX_SIGNAL_LOCKABLE_HPP_
Definition: lockable.hpp:16