toMatlab.h
Go to the documentation of this file.
1 /* Copyright 2020 CNRS-AIST JRL */
2 
3 #pragma once
4 
5 #include <Eigen/Dense>
6 #include <iosfwd>
7 #include <jrl-qp/internal/meta.h>
8 
9 namespace jrl::qp::utils
10 {
12 template<typename T>
13 inline constexpr bool is_convertible_to_eigen_ref_v = std::is_convertible_v<T, Eigen::Ref<const Eigen::MatrixXd>>;
14 
23 class toMatlab
24 {
25 public:
26  toMatlab(const Eigen::Ref<const Eigen::MatrixXd> & M) : mat(M) {}
27 
28  template<typename Derived, typename std::enable_if<!is_convertible_to_eigen_ref_v<Derived>, int>::type = 0>
29  toMatlab(const Eigen::EigenBase<Derived> & M) : tmp(M), mat(tmp)
30  {
31  }
32 
33 private:
34  Eigen::MatrixXd tmp;
35  const Eigen::Ref<const Eigen::MatrixXd> mat;
36 
37  friend std::ostream & operator<<(std::ostream &, const toMatlab &);
38 };
39 
40 inline std::ostream & operator<<(std::ostream & o, const toMatlab & tom)
41 {
42  if(tom.mat.cols() == 1)
43  {
44  Eigen::IOFormat fmt(Eigen::StreamPrecision, 0, "; ", ";", "", "", "[", "]");
45  o << tom.mat.transpose().format(fmt);
46  }
47  else
48  {
49  Eigen::IOFormat fmt(Eigen::StreamPrecision, 0, ", ", ";\n", "", "", "[", "]");
50  o << tom.mat.format(fmt);
51  }
52  return o;
53 }
54 } // namespace jrl::qp::utils
jrl::qp::utils::toMatlab::toMatlab
toMatlab(const Eigen::Ref< const Eigen::MatrixXd > &M)
Definition: toMatlab.h:26
jrl::qp::utils
Definition: Logger.h:13
jrl::qp::utils::is_convertible_to_eigen_ref_v
constexpr bool is_convertible_to_eigen_ref_v
Definition: toMatlab.h:13
jrl::qp::utils::operator<<
std::ostream & operator<<(std::ostream &o, const toMatlab &tom)
Definition: toMatlab.h:40
jrl::qp::utils::toMatlab::toMatlab
toMatlab(const Eigen::EigenBase< Derived > &M)
Definition: toMatlab.h:29
jrl::qp::utils::toMatlab::operator<<
friend std::ostream & operator<<(std::ostream &, const toMatlab &)
Definition: toMatlab.h:40
meta.h
jrl::qp::utils::toMatlab
Definition: toMatlab.h:23