Files
revng-revng/include/revng/Pipeline/AnalysesList.h
Massimo Fioravanti 312e2e8d53 Add analyses lists
Introduces the possibility of specifiying lists of analyses as way to
give them coherent names.
2023-03-22 17:31:46 +01:00

56 lines
1.4 KiB
C++

#pragma once
//
// This file is distributed under the MIT License. See LICENSE.md for details.
//
#include <vector>
#include "revng/Pipeline/Analysis.h"
namespace pipeline {
class AnalysisReference {
private:
std::string StepName;
std::string AnalysisName;
public:
AnalysisReference(std::string StepName, std::string AnalysisName) :
StepName(StepName), AnalysisName(AnalysisName) {}
llvm::StringRef getStepName() const { return StepName; }
llvm::StringRef getAnalysisName() const { return AnalysisName; }
};
class AnalysesList {
private:
std::string Name;
using Container = std::vector<AnalysisReference>;
Container Analyses;
public:
using iterator = Container::iterator;
using const_iterator = Container::const_iterator;
public:
AnalysesList(llvm::StringRef Name,
llvm::ArrayRef<AnalysisReference> Analyses = {}) :
Name(Name.str()), Analyses(Analyses) {}
iterator begin() { return Analyses.begin(); }
iterator end() { return Analyses.end(); }
const_iterator begin() const { return Analyses.begin(); }
const_iterator end() const { return Analyses.end(); }
void addAnalysisReference(std::string StepName, std::string AnalysisName) {
Analyses.emplace_back(StepName, AnalysisName);
}
size_t size() const { return Analyses.size(); }
const AnalysisReference &at(size_t Index) const { return Analyses.at(Index); }
llvm::StringRef getName() const { return Name; }
};
} // namespace pipeline