6 #ifndef IROHA_LIBS_COMMON_HPP 7 #define IROHA_LIBS_COMMON_HPP 11 #include <shared_mutex> 15 template <
typename To,
typename From>
17 std::shared_ptr<From>
const &ptr) noexcept {
18 return std::shared_ptr<To>(ptr,
reinterpret_cast<To *
>(ptr.get()));
22 inline std::weak_ptr<T>
make_weak(std::shared_ptr<T>
const &ptr) noexcept {
65 template <
typename... Args>
70 std::unique_lock lock(cs_);
71 return std::forward<F>(f)(t_);
76 std::shared_lock lock(cs_);
77 return std::forward<F>(f)(t_);
82 mutable std::shared_mutex cs_;
86 std::condition_variable wait_cv_;
93 bool wait(std::chrono::microseconds wait_timeout) {
94 std::unique_lock<std::mutex> _lock(wait_m_);
95 return wait_cv_.wait_for(_lock, wait_timeout, [&]() {
103 std::unique_lock<std::mutex> _lock(wait_m_);
104 wait_cv_.wait(_lock, [&]() {
113 std::unique_lock<std::mutex> _lock(wait_m_);
116 wait_cv_.notify_one();
121 #endif // IROHA_LIBS_COMMON_HPP WaitForSingleObject()
Definition: common.hpp:91
NoCopy & operator=(NoCopy const &)=delete
Definition: common.hpp:13
auto sharedAccess(F &&f) const
Definition: common.hpp:75
Definition: common.hpp:26
void wait()
Definition: common.hpp:102
ReadWriteObject(Args &&... args)
Definition: common.hpp:66
bool wait(std::chrono::microseconds wait_timeout)
Definition: common.hpp:93
auto exclusiveAccess(F &&f)
Definition: common.hpp:69
Definition: common.hpp:85
Definition: common.hpp:64
std::shared_ptr< To > reinterpret_pointer_cast(std::shared_ptr< From > const &ptr) noexcept
Definition: common.hpp:16
Definition: common.hpp:32
std::weak_ptr< T > make_weak(std::shared_ptr< T > const &ptr) noexcept
Definition: common.hpp:22