5namespace bricks::detail {
7template <
typename T,
typename mutex_type>
10 write_guard(T& this_in, mutex_type& mutex_in) noexcept : this_(this_in), mutex_(mutex_in)
15 ~write_guard() noexcept { mutex_.unlock(); }
17 write_guard(
const write_guard&) =
delete;
18 auto operator=(
const write_guard&) -> write_guard& =
delete;
20 write_guard(write_guard&&) noexcept = default;
21 auto operator=(write_guard&&) noexcept -> write_guard& = default;
23 template <typename U = T, typename std::enable_if_t<!std::is_const_v<U>,
bool> = true>
24 auto operator->() noexcept -> typename T::value_type*
28 auto operator->() const noexcept -> const typename T::value_type* {
return &this_; }
30 template <
typename U = T,
typename std::enable_if_t<!std::is_const_v<U>,
bool> = true>
31 auto operator*() noexcept -> typename T::value_type&
35 auto operator*() const noexcept -> const typename T::value_type& {
return this_; }