23 auto *
const data = M.derived().data();
24 using T = std::remove_pointer_t<
decltype(data)>;
25 using Scalar =
typename Derived::Scalar;
26 static_assert(std::is_same_v<Scalar, std::remove_const_t<T>>);
27 static constexpr auto O =
29 const auto rows =
static_cast<I
>(M.derived().rows()),
30 cols =
static_cast<I
>(M.derived().cols()),
31 outer_stride =
static_cast<I
>(M.derived().outerStride());
32 constexpr auto static_inner_stride = Derived::InnerStrideAtCompileTime;
34 if constexpr (static_inner_stride == Eigen::Dynamic) {
35 const auto inner_stride =
static_cast<I
>(M.derived().innerStride());
39 .inner_stride = inner_stride,
40 .outer_stride = outer_stride}};
44 using S = std::integral_constant<I, static_inner_stride>;
48 .outer_stride = outer_stride}};
108 constexpr auto Opt = M.
is_row_major ? Eigen::RowMajor : Eigen::ColMajor;
109 constexpr auto X = Eigen::Dynamic;
110 using Scalar = std::remove_const_t<T>;
111 using Mat = Eigen::Matrix<Scalar, X, X, Opt>;
112 using CMat = std::conditional_t<std::is_const_v<T>,
const Mat, Mat>;
113 using Index =
typename Mat::Index;
114 const auto rows =
static_cast<Index
>(M.
rows),
115 cols =
static_cast<Index
>(M.
cols),
118 if constexpr (
requires { S::value; }) {
119 static constexpr auto inner_stride =
static_cast<Index
>(M.
inner_stride);
124 if constexpr (inner_stride == 0 || inner_stride == Eigen::Dynamic) {
125 using Stride = Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>;
126 using Map = Eigen::Map<CMat, 0, Stride>;
127 return Map{M.
data, rows, cols, {outer_stride, inner_stride}};
130 else if constexpr (inner_stride == 1) {
131 using Stride = Eigen::OuterStride<>;
132 using Map = Eigen::Map<CMat, 0, Stride>;
133 return Map{M.
data, rows, cols, {outer_stride}};
137 using Stride = Eigen::Stride<Eigen::Dynamic, inner_stride>;
138 using Map = Eigen::Map<CMat, 0, Stride>;
139 return Map{M.
data, rows, cols, {outer_stride, inner_stride}};
144 const auto inner_stride =
static_cast<Index
>(M.
inner_stride);
145 using Stride = Eigen::Stride<Eigen::Dynamic, Eigen::Dynamic>;
146 using Map = Eigen::Map<CMat, 0, Stride>;
147 return Map{M.
data, rows, cols, {outer_stride, inner_stride}};