6#include <unordered_map>
16 virtual void anchor();
29 std::recursive_mutex lock_;
30 std::unordered_map<std::type_index, std::unique_ptr<Analysis>> cache_;
40 return T::available(AM);
45 std::lock_guard<std::recursive_mutex> lock(lock_);
47 std::type_index Key = std::type_index(
typeid(T));
48 auto It = cache_.find(Key);
49 if (It != cache_.end()) {
50 return *
static_cast<T*
>(It->second.get());
53 cache_[Key] = std::make_unique<T>();
54 cache_[Key]->run(*
this);
56 return *
static_cast<T*
>(cache_[Key].get());
T & get()
Definition analysis.h:44
AnalysisManager & operator=(const AnalysisManager &)=delete
static bool available(AnalysisManager &AM)
Definition analysis.h:39
friend class SDFGRegistry
Definition analysis.h:26
AnalysisManager()=default
AnalysisManager(const AnalysisManager &)=delete
virtual ~Analysis()=default
virtual void run(AnalysisManager &AM)=0
friend class AnalysisManager
Definition analysis.h:15
Definition sdfg_registry.h:55