diff options
| author | AL <26797547+Al12rs@users.noreply.github.com> | 2020-11-28 17:21:33 +0100 |
|---|---|---|
| committer | AL <26797547+Al12rs@users.noreply.github.com> | 2020-11-28 17:21:33 +0100 |
| commit | d99e576db8913af8ff864fcce9f67f51be252e99 (patch) | |
| tree | 85c7d981bfd13ebf5674b680f1e8f89368b64aa1 /src/thread_utils.h | |
| parent | a0229380ce08715198a1181b61c2f357ad641ca8 (diff) | |
| parent | 2c115e48cc42f89250bbca7e2b5b75d5dcad8695 (diff) | |
Merge branch 'master' into Al12rs-refresh-waitForApplication
Diffstat (limited to 'src/thread_utils.h')
| -rw-r--r-- | src/thread_utils.h | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/src/thread_utils.h b/src/thread_utils.h index f64dd601..e816a4e2 100644 --- a/src/thread_utils.h +++ b/src/thread_utils.h @@ -24,51 +24,6 @@ std::thread startSafeThread(F&& f) }); } - -/** - * Class that can be used to perform thread-safe memoization. - * - * Each instance hold a flag indicating if the current value is up-to-date - * or not. This flag can be reset using `invalidate()`. When the value is queried, - * the flag is checked, and if it is not up-to-date, the given callback is used - * to compute the value. - * - * The computation and update of the value is locked to avoid concurrent modifications. - * - * @tparam T Type of value ot memoized. - * @tparam Fn Type of the callback. - */ -template <class T, class Fn = std::function<T()>> -struct MemoizedLocked { - - template <class Callable> - MemoizedLocked(Callable &&callable, T value = {}) : - m_Fn{ std::forward<Callable>(callable) }, m_Value{ std::move(value) } { } - - template <class... Args> - T& value(Args&&... args) const { - if (m_NeedUpdating) { - std::scoped_lock lock(m_Mutex); - if (m_NeedUpdating) { - m_Value = std::invoke(m_Fn, std::forward<Args>(args)... ); - m_NeedUpdating = false; - } - } - return m_Value; - } - - void invalidate() { - m_NeedUpdating = true; - } - -private: - mutable std::mutex m_Mutex; - mutable std::atomic<bool> m_NeedUpdating{ true }; - - Fn m_Fn; - mutable T m_Value; -}; - /** * @brief Apply the given callable to each element between the two given iterators * in a parallel way. |
