TVM  0.9.4
BufferedMatrix.h
Go to the documentation of this file.
1 
3 #pragma once
4 
5 #include <Eigen/Core>
6 
7 namespace tvm
8 {
9 
10 namespace utils
11 {
12 
13 namespace internal
14 {
20 {
21 public:
25  BufferedMatrix(Eigen::DenseIndex m, Eigen::DenseIndex n);
26 
30  Eigen::Map<const Eigen::MatrixXd, Eigen::Aligned> get() const;
34  Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> get();
35 
39  void resize(Eigen::DenseIndex m, Eigen::DenseIndex n);
40 
41  template<typename Derived>
42  Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> & operator=(const Eigen::EigenBase<Derived> & xpr);
43 
44 private:
45  Eigen::DenseIndex m_;
46  Eigen::DenseIndex n_;
47  Eigen::VectorXd buffer_;
48 };
49 
50 inline BufferedMatrix::BufferedMatrix(Eigen::DenseIndex m, Eigen::DenseIndex n) { resize(m, n); }
51 
52 inline Eigen::Map<const Eigen::MatrixXd, Eigen::Aligned> BufferedMatrix::get() const
53 { return Eigen::Map<const Eigen::MatrixXd, Eigen::Aligned>(buffer_.data(), m_, n_); }
54 
55 inline Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> BufferedMatrix::get()
56 { return Eigen::Map<Eigen::MatrixXd, Eigen::Aligned>(buffer_.data(), m_, n_); }
57 
58 inline void BufferedMatrix::resize(Eigen::DenseIndex m, Eigen::DenseIndex n)
59 {
60  if(m * n > buffer_.size())
61  {
62  buffer_.resize(2 * m * n);
63  }
64  m_ = m;
65  n_ = n;
66 }
67 
68 template<typename Derived>
69 inline Eigen::Map<Eigen::MatrixXd, Eigen::Aligned> & BufferedMatrix::operator=(const Eigen::EigenBase<Derived> & xpr)
70 {
71  resize(xpr.rows(), xpr.cols());
72  return get() = xpr;
73 }
74 
75 } // namespace internal
76 
77 } // namespace utils
78 
79 } // namespace tvm
Definition: BufferedMatrix.h:20
Eigen::Map< Eigen::MatrixXd, Eigen::Aligned > & operator=(const Eigen::EigenBase< Derived > &xpr)
Definition: BufferedMatrix.h:69
Eigen::Map< const Eigen::MatrixXd, Eigen::Aligned > get() const
Definition: BufferedMatrix.h:52
void resize(Eigen::DenseIndex m, Eigen::DenseIndex n)
Definition: BufferedMatrix.h:58
BufferedMatrix(Eigen::DenseIndex m, Eigen::DenseIndex n)
Definition: BufferedMatrix.h:50
Definition: Clock.h:12