#pragma once

#include "fesa/solvers/linear/linear_solver.hpp"

#include <memory>

namespace fesa {

// Keeps every oneMKL type and the retained factorization in the private Impl.
class MklPardisoSolver final : public LinearSolver {
public:
    MklPardisoSolver();
    ~MklPardisoSolver() override;

    Status factorize(const SparseMatrix& matrix) override;
    Status solve(const Vector& rhs, Vector& solution) const override;

private:
    class Impl;
    std::unique_ptr<Impl> impl_;
};

} // namespace fesa
