#include "fesa/analysis/linear_static_analysis.h" #include #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 prepared = PrepareAnalysisInput(request.input_path); if (!prepared.HasValue()) { return prepared.GetStatus(); } LinearStaticProcedureExecutor executor(parallel_for_, linear_solver_); Result 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