From 86f516953df9dc80c6726c30f47e15b660a89a4e Mon Sep 17 00:00:00 2001 From: Mikaƫl Capelle Date: Mon, 25 May 2020 17:56:45 +0200 Subject: Update MemoizedLock to allow more flexible callable. --- src/thread_utils.h | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/thread_utils.h') diff --git a/src/thread_utils.h b/src/thread_utils.h index 6c044138..f0067b6a 100644 --- a/src/thread_utils.h +++ b/src/thread_utils.h @@ -1,6 +1,7 @@ #ifndef MO2_THREAD_UTILS_H #define MO2_THREAD_UTILS_H +#include #include #include @@ -19,11 +20,12 @@ namespace MOShared { * @tparam T Type of value ot memoized. * @tparam Fn Type of the callback. */ -template +template > struct MemoizedLocked { - MemoizedLocked(Fn callback, T value = {}) : - m_Fn{ callback }, m_Value{ std::move(value) } { } + template + MemoizedLocked(Callable &&callable, T value = {}) : + m_Fn{ std::forward(callable) }, m_Value{ std::move(value) } { } template T& value(Args&&... args) const { @@ -31,14 +33,14 @@ struct MemoizedLocked { std::scoped_lock lock(m_Mutex); if (m_NeedUpdating) { m_Value = std::invoke(m_Fn, std::forward(args)... ); - m_NeedUpdating.store(false); + m_NeedUpdating = false; } } return m_Value; } - void invalidate() const { - m_NeedUpdating.store(true); + void invalidate() { + m_NeedUpdating = true; } private: -- cgit v1.3.1