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