Iros
 
Loading...
Searching...
No Matches
synchronized.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/core.h"
6#include "di/meta/util.h"
11
12namespace di::sync {
13template<typename Value, concepts::Lock Lock = DefaultLock>
15
16template<typename Value, concepts::Lock Lock = DefaultLock>
18public:
21 = default;
22
23 template<typename U>
26 constexpr explicit Synchronized(U&& value) : m_value(util::forward<U>(value)) {}
27
28 template<typename... Args>
29 requires(concepts::ConstructibleFrom<Value, Args...>)
30 constexpr explicit Synchronized(InPlace, Args&&... args) : m_value(util::forward<Args>(args)...) {}
31
33
34 template<concepts::Invocable<Value&> Fun>
36 auto guard = ScopedLock(m_lock);
37 return function::invoke(util::forward<Fun>(function), m_value);
38 }
39
40 constexpr auto lock() { return LockedReference<Value, Lock>(m_value, m_lock); }
41
42 constexpr auto get_assuming_no_concurrent_accesses() -> Value& { return m_value; }
43 constexpr auto get_const_assuming_no_concurrent_mutations() const -> Value const& { return m_value; }
44
45 constexpr auto read() const -> Value
46 requires(concepts::CopyConstructible<Value>)
47 {
48 auto guard = ScopedLock(m_lock);
49 return m_value;
50 }
51
52 auto get_lock() -> Lock& { return m_lock; }
53
54private:
55 Value m_value {};
56 Lock mutable m_lock {};
57};
58
59template<typename T>
61}
62
63namespace di {
65}
Definition scoped_lock.h:8
Definition synchronized.h:17
constexpr auto read() const -> Value requires(concepts::CopyConstructible< Value >)
Definition synchronized.h:45
auto get_lock() -> Lock &
Definition synchronized.h:52
constexpr Synchronized(InPlace, Args &&... args)
Definition synchronized.h:30
constexpr auto get_assuming_no_concurrent_accesses() -> Value &
Definition synchronized.h:42
constexpr auto lock()
Definition synchronized.h:40
constexpr auto with_lock(Fun &&function) -> meta::InvokeResult< Fun, Value & >
Definition synchronized.h:35
constexpr Synchronized(U &&value)
Definition synchronized.h:26
constexpr auto get_const_assuming_no_concurrent_mutations() const -> Value const &
Definition synchronized.h:43
Synchronized(Synchronized &&)=delete
Definition guarded_reference.h:8
Definition operations.h:11
Definition operations.h:24
Definition core.h:114
Definition any_storable.h:9
Definition as_bool.h:8
constexpr auto invoke
Definition invoke.h:100
decltype(function::detail::invoke_impl(util::declval< Ts >()...)) InvokeResult
Definition invoke.h:64
Definition atomic.h:12
util::GuardedReference< Value, ScopedLock< Lock > > LockedReference
Definition synchronized.h:14
Synchronized(T &&) -> Synchronized< T >
Definition zstring_parser.h:9
Definition in_place.h:4