38 lines
1.2 KiB
C++
38 lines
1.2 KiB
C++
#include "fesa/analysis/linear_static_analysis.h"
|
|
|
|
#include <utility>
|
|
|
|
#include "fesa/analysis/linear_static_procedure.h"
|
|
#include "fesa/analysis/prepared_analysis.h"
|
|
#include "fesa/results/results_writer.h"
|
|
|
|
namespace fesa {
|
|
|
|
LinearStaticAnalysis::LinearStaticAnalysis(const ParallelFor& parallel_for,
|
|
LinearSolver& linear_solver,
|
|
ResultsWriter& results_writer)
|
|
: parallel_for_{parallel_for},
|
|
linear_solver_{linear_solver},
|
|
results_writer_{results_writer} {}
|
|
|
|
Status LinearStaticAnalysis::Run(const AnalysisRequest& request) {
|
|
Result<PreparedAnalysisInput> prepared =
|
|
PrepareAnalysisInput(request.input_path);
|
|
if (!prepared.HasValue()) {
|
|
return prepared.GetStatus();
|
|
}
|
|
|
|
LinearStaticProcedureExecutor executor(parallel_for_, linear_solver_);
|
|
Result<LinearStaticExecutionResult> execution =
|
|
executor.Execute(prepared.Value().domain);
|
|
if (!execution.HasValue()) {
|
|
return execution.GetStatus();
|
|
}
|
|
|
|
return results_writer_.Write(request.output_path, prepared.Value().domain,
|
|
execution.Value().state,
|
|
execution.Value().diagnostics);
|
|
}
|
|
|
|
} // namespace fesa
|