34 template <
typename LockHolder,
typename Element>
47 explicit operator bool()
const {
48 return static_cast<bool>(*holder_);
55 template <
typename Po
interType,
typename MutexType = SharedMutex>
62 using element_type =
typename std::pointer_traits<pointer_type>::element_type;
72 template <
typename...
Args>
74 : inner_(
std::forward<
Args>(args)...) {}
89 template <
class Function>
91 return function(*
rlock());
98 template <
class Function>
100 return function(*
wlock());
108 return inner_.wlock();
111 template <
class Function>
113 return function(*wlockPointer());
SynchronizedPtr(Args...args)
typename Base::ConstLockedPtr ConstLockedPtr
auto wlock(Synchronized< D, M > &synchronized, Args &&...args)
auto withRLock(Function &&function) const
constexpr detail::Map< Move > move
internal::ArgsMatcher< InnerMatcher > Args(const InnerMatcher &matcher)
—— Concurrent Priority Queue Implementation ——
typename inner_type::LockedPtr write_locked_pointer
write_locked_pointer wlockPointer()
auto rlock(const Synchronized< Data, Mutex > &synchronized, Args &&...args)
typename Base::LockedPtr LockedPtr
Element * operator->() const
typename std::add_const< element_type >::type const_element_type
auto withWLock(Function &&function)
read_locked_element rlock() const
Element & operator*() const
SynchronizedPtrLockedElement(LockHolder &&holder)
write_locked_element wlock()
typename std::pointer_traits< pointer_type >::element_type element_type
auto withWLockPointer(Function &&function)