VapourSynth-llvmexpr
Loading...
Searching...
No Matches
PreservedAnalyses.hpp
Go to the documentation of this file.
1
19
20#ifndef LLVMEXPR_ANALYSIS_FRAMEWORK_PRESERVED_ANALYSES_HPP
21#define LLVMEXPR_ANALYSIS_FRAMEWORK_PRESERVED_ANALYSES_HPP
22
23#include <typeindex>
24#include <unordered_set>
25
26namespace analysis {
27
28class PreservedAnalyses {
29 public:
30 static PreservedAnalyses all() { return PreservedAnalyses(true); }
31
32 static PreservedAnalyses none() { return PreservedAnalyses(false); }
33
34 [[nodiscard]] bool preservedAll() const { return preserved_all; }
35
36 template <typename PassT> void preserve() {
37 if (!preserved_all) {
38 preserved_passes.insert(std::type_index(typeid(PassT)));
39 }
40 }
41
42 template <typename PassT> [[nodiscard]] bool isPreserved() const {
43 if (preserved_all) {
44 return true;
45 }
46 return preserved_passes.contains(std::type_index(typeid(PassT)));
47 }
48
49 [[nodiscard]] bool isPreserved(const std::type_index& pass_type) const {
50 if (preserved_all) {
51 return true;
52 }
53 return preserved_passes.contains(pass_type);
54 }
55
56 private:
57 explicit PreservedAnalyses(bool all) : preserved_all(all) {}
58
59 bool preserved_all;
60 std::unordered_set<std::type_index> preserved_passes;
61};
62
63} // namespace analysis
64
65#endif // LLVMEXPR_ANALYSIS_FRAMEWORK_PRESERVED_ANALYSES_HPP
static PreservedAnalyses all()
bool isPreserved(const std::type_index &pass_type) const
static PreservedAnalyses none()