26 #ifndef TILEDARRAY_UTIL_EIGEN_H__INCLUDED
27 #define TILEDARRAY_UTIL_EIGEN_H__INCLUDED
38 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
40 Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& m) {
44 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
46 const Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& m) {
50 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
51 constexpr
auto end(Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& m) {
52 return m.data() + m.size();
55 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
57 const Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& m) {
58 return m.data() + m.size();
69 template <
typename Range,
70 typename = std::enable_if_t<detail::is_integral_range_v<Range> &&
71 detail::is_sized_range_v<Range>>>
72 Eigen::Matrix<detail::value_t<Range>, Eigen::Dynamic, 1>
iv(
Range&& rng) {
73 Eigen::Matrix<detail::value_t<Range>, Eigen::Dynamic, 1> result(
76 for (
auto&& i : rng) {
96 template <
typename Int,
typename = std::enable_if_t<std::is_
integral_v<Int>>>
97 Eigen::Matrix<Int, Eigen::Dynamic, 1>
iv(std::initializer_list<Int> list) {
98 Eigen::Map<const Eigen::Matrix<Int, Eigen::Dynamic, 1>> result(data(list),
104 template <
typename Mat,
typename T,
typename... Ts>
107 if constexpr (
sizeof...(Ts) > 0) {
113 template <
typename Int,
typename... Ints,
114 typename = std::enable_if_t<std::is_integral_v<Int> &&
115 (std::is_integral_v<Ints> && ...)>>
116 constexpr
auto iv(Int i0, Ints... rest) {
123 template <
typename Derived>
124 auto iv(
const Eigen::MatrixBase<Derived>& mat) {
125 Eigen::Matrix<typename Eigen::internal::traits<Derived>::Scalar,
126 Eigen::internal::traits<Derived>::RowsAtCompileTime,
127 Eigen::internal::traits<Derived>::ColsAtCompileTime>
136 #include <boost/range.hpp>
140 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
141 struct range_mutable_iterator<
142 Eigen::
Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>> {
146 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
147 struct range_const_iterator<
148 Eigen::
Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>> {
155 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
157 const Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
160 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
161 auto range_begin(Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
165 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
167 const Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
168 return mat.data() + mat.size();
170 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
171 auto range_end(Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
172 return mat.data() + mat.size();
175 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
177 const Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
180 template <
typename _Scalar,
int _Rows,
int _Options,
int _MaxRows>
182 Eigen::Matrix<_Scalar, _Rows, 1, _Options, _MaxRows, 1>& mat) {
188 #endif // TILEDARRAY_UTIL_EIGEN_H__INCLUDED