#include <Eigen/Sparse>
#include <vector>
#include <iostream>

typedef Eigen::SparseMatrix<double> SpMat;  // declares a column-major sparse matrix type of double
typedef Eigen::Triplet<double> T;

void buildProblem(std::vector<T>& coefficients, Eigen::VectorXd& b, int n);
void saveAsBitmap(const Eigen::VectorXd& x, int n, const char* filename);

int main(int argc, char** argv) {
  if (argc != 2) {
    std::cerr << "Error: expected one and only one argument.\n";
    return -1;
  }

  int n = 300;    // size of the image
  int m = n * n;  // number of unknowns (=number of pixels)

  // Assembly:
  std::vector<T> coefficients;  // list of non-zeros coefficients
  Eigen::VectorXd b(m);         // the right hand side-vector resulting from the constraints
  buildProblem(coefficients, b, n);

  SpMat A(m, m);
  A.setFromTriplets(coefficients.begin(), coefficients.end());

  // Solving:
  Eigen::SimplicialCholesky<SpMat> chol(A);  // performs a Cholesky factorization of A
  Eigen::VectorXd x = chol.solve(b);         // use the factorization to solve for the given right hand side

  // Export the result to a file:
  saveAsBitmap(x, n, argv[1]);

  return 0;
}
