10#ifndef PBAT_COMMON_EIGEN_H
11#define PBAT_COMMON_EIGEN_H
27template <CContiguousArithmeticRange R>
29 -> Eigen::Map<Eigen::Vector<std::ranges::range_value_t<R>, Eigen::Dynamic>
const>
31 namespace rng = std::ranges;
32 return Eigen::Map<Eigen::Vector<std::ranges::range_value_t<R>, Eigen::Dynamic>
const>(
34 static_cast<Eigen::Index
>(rng::size(r)));
43template <CContiguousArithmeticMatrixRange R>
44auto ToEigen(R&& r) -> Eigen::Map<Eigen::Matrix<
45 typename std::ranges::range_value_t<R>::Scalar,
47 Eigen::Dynamic>
const>
49 namespace rng = std::ranges;
50 using ValueType = rng::range_value_t<R>;
51 using ScalarType =
typename ValueType::Scalar;
52 auto rows = ValueType::RowsAtCompileTime;
53 auto cols = ValueType::ColsAtCompileTime;
54 if constexpr (ValueType::Flags & Eigen::RowMajorBit)
55 std::swap(rows, cols);
57 return Eigen::Map<Eigen::Matrix<ScalarType, Eigen::Dynamic, Eigen::Dynamic>
const>(
58 static_cast<ScalarType const*
>(std::addressof(rng::data(r)[0][0])),
60 static_cast<Eigen::Index
>(rng::size(r)) *
static_cast<int>(cols));
65template <std::ranges::random_access_range R>
68 Slice(R&& _r) : r(std::forward<R>(_r)) {}
70 Index size()
const {
return static_cast<Index>(std::ranges::size(r)); }
73 std::remove_cvref_t<R> r;
85template <std::ranges::random_access_range R>
88 return detail::Slice<R>(std::forward<R>(r));
Concepts for common types.
Common functionality.
Definition ArgSort.h:20
auto Slice(R &&r)
Slice view over a range for Eigen advanced indexing.
Definition Eigen.h:86
auto ToEigen(R &&r) -> Eigen::Map< Eigen::Vector< std::ranges::range_value_t< R >, Eigen::Dynamic > const >
Map a range of scalars to an eigen vector of such scalars.
Definition Eigen.h:28
The main namespace of the library.
Definition Aliases.h:15
std::ptrdiff_t Index
Index type.
Definition Aliases.h:17