diff options
| author | Seth Riley <17361645+Qudix@users.noreply.github.com> | 2020-12-01 15:55:50 -0600 |
|---|---|---|
| committer | Seth Riley <17361645+Qudix@users.noreply.github.com> | 2020-12-01 15:55:50 -0600 |
| commit | 852d8745a1ac3ef2aaa83ae21d473d20428d7d30 (patch) | |
| tree | 7ff242377cd3ec72571cd96cd631c28bbaac6470 /src/thread_utils.h | |
| parent | 60688ecf5bc6e44795472cb22888ec5994a904a8 (diff) | |
| parent | 1ec3ab2b8a845f75495b4cacbeb17c86ea137a01 (diff) | |
Merge https://github.com/ModOrganizer2/modorganizer into ignore_alt
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. |
