58class CacheControl
final {
66 const std::unordered_set<std::string>& force_incremental_names,
67 const std::unordered_set<std::string>& exclude_names
81 std::unordered_set<std::string> reset_only_names,
82 const std::unordered_set<std::string>& force_incremental_names
85 CacheControl(CacheControl&&) =
delete;
86 CacheControl& operator=(CacheControl&&) =
delete;
91 explicit UnitTests() =
default;
94 enum class ExecPolicy {
99 CacheControl(impl::PeriodicUpdatesMode, UnitTests);
101 impl::PeriodicUpdatesMode,
104 impl::CacheReverseDependencies reverse_dependencies
109 bool IsPeriodicUpdateEnabled(
const cache::Config& cache_config,
const std::string& cache_name)
const;
115 CacheResetRegistration RegisterCache(
116 utils::impl::InternalTag,
117 std::string_view name,
121 struct CacheInfo
final {
124 bool needs_span{
true};
126 struct CacheInfoNode;
127 using CacheInfoIterator = CacheInfoNode*;
130 CacheInfoIterator DoRegisterCache(CacheInfo&& info);
133 friend class CacheResetRegistration;
139 const std::unordered_set<std::string>* reset_only_names,
140 const std::unordered_set<std::string>& force_incremental_names,
141 const std::unordered_set<std::string>* exclude_names
144 void DoResetCachesConcurrently(
146 const std::unordered_set<std::string>* reset_only_names,
147 std::unordered_set<std::string>& names_left_to_encounter,
148 const std::unordered_set<std::string>& force_incremental_names,
149 const std::unordered_set<std::string>* exclude_names
152 void UnregisterCache(CacheInfoIterator)
noexcept;
154 static void DoResetSingleCache(
155 const CacheInfo& info,
157 const std::unordered_set<std::string>& force_incremental_names
161 std::unique_ptr<Impl> impl_;
173class [[nodiscard]] CacheResetRegistration
final {
175 CacheResetRegistration()
noexcept;
177 CacheResetRegistration(CacheResetRegistration&&)
noexcept;
178 CacheResetRegistration& operator=(CacheResetRegistration&&)
noexcept;
179 ~CacheResetRegistration();
187 CacheResetRegistration(CacheControl&, CacheControl::CacheInfoIterator);
191 CacheControl* cache_control_{
nullptr};
192 CacheControl::CacheInfoIterator cache_info_iterator_{};