Refactor indexed view to appease MSVC 14.16.
diff --git a/Eigen/src/Core/util/IndexedViewHelper.h b/Eigen/src/Core/util/IndexedViewHelper.h
index c187002..59486ea 100644
--- a/Eigen/src/Core/util/IndexedViewHelper.h
+++ b/Eigen/src/Core/util/IndexedViewHelper.h
@@ -308,6 +308,178 @@
static Index incr(const Indices& indices) { return indices.incr(); }
};
+// this helper class assumes internal::valid_indexed_view_overload<RowIndices, ColIndices>::value == true
+template <typename Derived, typename RowIndices, typename ColIndices, typename EnableIf = void>
+struct IndexedViewSelector;
+
+template <typename Indices, int SizeAtCompileTime>
+using IvcType = typename internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::type;
+
+template <int SizeAtCompileTime, typename Indices>
+inline IvcType<Indices, SizeAtCompileTime> CreateIndexSequence(size_t size, const Indices& indices) {
+ return internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::CreateIndexSequence(indices, size);
+}
+
+// Generic
+template <typename Derived, typename RowIndices, typename ColIndices>
+struct IndexedViewSelector<Derived, RowIndices, ColIndices,
+ std::enable_if_t<internal::traits<
+ IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsIndexedView>> {
+ using ReturnType = IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>;
+ using ConstReturnType = IndexedView<const Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>;
+
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
+ return ReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices),
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices));
+ }
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
+ const ColIndices& colIndices) {
+ return ConstReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices),
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices));
+ }
+};
+
+// Block
+template <typename Derived, typename RowIndices, typename ColIndices>
+struct IndexedViewSelector<
+ Derived, RowIndices, ColIndices,
+ std::enable_if_t<internal::traits<IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsBlock>> {
+ using ActualRowIndices = IvcType<RowIndices, Derived::RowsAtCompileTime>;
+ using ActualColIndices = IvcType<ColIndices, Derived::ColsAtCompileTime>;
+ using IndexedViewType = IndexedView<Derived, ActualRowIndices, ActualColIndices>;
+ using ConstIndexedViewType = IndexedView<const Derived, ActualRowIndices, ActualColIndices>;
+ using ReturnType = typename internal::traits<IndexedViewType>::BlockType;
+ using ConstReturnType = typename internal::traits<ConstIndexedViewType>::BlockType;
+ using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
+ using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
+
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
+ return ReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
+ RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
+ }
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
+ const ColIndices& colIndices) {
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
+ return ConstReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
+ RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
+ }
+};
+
+// Scalar
+template <typename Derived, typename RowIndices, typename ColIndices>
+struct IndexedViewSelector<
+ Derived, RowIndices, ColIndices,
+ std::enable_if_t<internal::traits<IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsScalar>> {
+ using ReturnType = typename DenseBase<Derived>::Scalar&;
+ using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
+ using ActualRowIndices = IvcType<RowIndices, Derived::RowsAtCompileTime>;
+ using ActualColIndices = IvcType<ColIndices, Derived::ColsAtCompileTime>;
+ using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
+ using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
+ return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
+ }
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
+ const ColIndices& colIndices) {
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
+ return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
+ }
+};
+
+// this helper class assumes internal::is_valid_index_type<Indices>::value == false
+template <typename Derived, typename Indices, typename EnableIf = void>
+struct VectorIndexedViewSelector;
+
+// Generic
+template <typename Derived, typename Indices>
+struct VectorIndexedViewSelector<
+ Derived, Indices,
+ std::enable_if_t<!internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value &&
+ internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>::IncrAtCompileTime !=
+ 1>> {
+ static constexpr bool IsRowMajor = DenseBase<Derived>::IsRowMajor;
+ using ZeroIndex = internal::SingleRange<Index(0)>;
+ using RowMajorReturnType = IndexedView<Derived, ZeroIndex, IvcType<Indices, Derived::SizeAtCompileTime>>;
+ using ConstRowMajorReturnType = IndexedView<const Derived, ZeroIndex, IvcType<Indices, Derived::SizeAtCompileTime>>;
+
+ using ColMajorReturnType = IndexedView<Derived, IvcType<Indices, Derived::SizeAtCompileTime>, ZeroIndex>;
+ using ConstColMajorReturnType = IndexedView<const Derived, IvcType<Indices, Derived::SizeAtCompileTime>, ZeroIndex>;
+
+ using ReturnType = typename internal::conditional<IsRowMajor, RowMajorReturnType, ColMajorReturnType>::type;
+ using ConstReturnType =
+ typename internal::conditional<IsRowMajor, ConstRowMajorReturnType, ConstColMajorReturnType>::type;
+
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
+ static inline RowMajorReturnType run(Derived& derived, const Indices& indices) {
+ return RowMajorReturnType(derived, ZeroIndex(0),
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), indices));
+ }
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
+ static inline ConstRowMajorReturnType run(const Derived& derived, const Indices& indices) {
+ return ConstRowMajorReturnType(derived, ZeroIndex(0),
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), indices));
+ }
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
+ static inline ColMajorReturnType run(Derived& derived, const Indices& indices) {
+ return ColMajorReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), indices),
+ ZeroIndex(0));
+ }
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
+ static inline ConstColMajorReturnType run(const Derived& derived, const Indices& indices) {
+ return ConstColMajorReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), indices),
+ ZeroIndex(0));
+ }
+};
+
+// Block
+template <typename Derived, typename Indices>
+struct VectorIndexedViewSelector<
+ Derived, Indices,
+ std::enable_if_t<!internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value &&
+ internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>::IncrAtCompileTime ==
+ 1>> {
+ using Helper = internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>;
+ using ReturnType = VectorBlock<Derived, Helper::SizeAtCompileTime>;
+ using ConstReturnType = VectorBlock<const Derived, Helper::SizeAtCompileTime>;
+ static inline ReturnType run(Derived& derived, const Indices& indices) {
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
+ return ReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
+ }
+ static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
+ return ConstReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
+ }
+};
+
+// Symbolic
+template <typename Derived, typename Indices>
+struct VectorIndexedViewSelector<
+ Derived, Indices,
+ std::enable_if_t<internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value>> {
+ using ReturnType = typename DenseBase<Derived>::Scalar&;
+ using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
+ using Helper = internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>;
+ static inline ReturnType run(Derived& derived, const Indices& indices) {
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
+ return derived(Helper::first(actualIndices));
+ }
+ static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
+ return derived(Helper::first(actualIndices));
+ }
+};
+
} // end namespace internal
} // end namespace Eigen
diff --git a/Eigen/src/plugins/IndexedViewMethods.inc b/Eigen/src/plugins/IndexedViewMethods.inc
index c3df429..a51e349 100644
--- a/Eigen/src/plugins/IndexedViewMethods.inc
+++ b/Eigen/src/plugins/IndexedViewMethods.inc
@@ -10,184 +10,6 @@
#if !defined(EIGEN_PARSED_BY_DOXYGEN)
public:
-// define some aliases to ease readability
-
-template <typename Indices>
-using IvcRowType = typename internal::IndexedViewHelperIndicesWrapper<Indices, RowsAtCompileTime>::type;
-
-template <typename Indices>
-using IvcColType = typename internal::IndexedViewHelperIndicesWrapper<Indices, ColsAtCompileTime>::type;
-
-template <typename Indices>
-using IvcSizeType = typename internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::type;
-
-template <typename Indices>
-inline IvcRowType<Indices> ivcRow(const Indices& indices) const {
- return internal::IndexedViewHelperIndicesWrapper<Indices, RowsAtCompileTime>::CreateIndexSequence(indices,
- derived().rows());
-}
-
-template <typename Indices>
-inline IvcColType<Indices> ivcCol(const Indices& indices) const {
- return internal::IndexedViewHelperIndicesWrapper<Indices, ColsAtCompileTime>::CreateIndexSequence(indices,
- derived().cols());
-}
-
-template <typename Indices>
-inline IvcSizeType<Indices> ivcSize(const Indices& indices) const {
- return internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::CreateIndexSequence(indices,
- derived().size());
- ;
-}
-
-// this helper class assumes internal::valid_indexed_view_overload<RowIndices, ColIndices>::value == true
-template <typename RowIndices, typename ColIndices, typename EnableIf = void>
-struct IndexedViewSelector;
-
-// Generic
-template <typename RowIndices, typename ColIndices>
-struct IndexedViewSelector<
- RowIndices, ColIndices,
- std::enable_if_t<
- internal::traits<IndexedView<Derived, IvcRowType<RowIndices>, IvcColType<ColIndices>>>::ReturnAsIndexedView>> {
- using ReturnType = IndexedView<Derived, IvcRowType<RowIndices>, IvcColType<ColIndices>>;
- using ConstReturnType = IndexedView<const Derived, IvcRowType<RowIndices>, IvcColType<ColIndices>>;
-
- static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
- return ReturnType(derived, derived.ivcRow(rowIndices), derived.ivcCol(colIndices));
- }
- static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
- const ColIndices& colIndices) {
- return ConstReturnType(derived, derived.ivcRow(rowIndices), derived.ivcCol(colIndices));
- }
-};
-
-// Block
-template <typename RowIndices, typename ColIndices>
-struct IndexedViewSelector<RowIndices, ColIndices,
- std::enable_if_t<internal::traits<
- IndexedView<Derived, IvcRowType<RowIndices>, IvcColType<ColIndices>>>::ReturnAsBlock>> {
- using ActualRowIndices = IvcRowType<RowIndices>;
- using ActualColIndices = IvcColType<ColIndices>;
- using IndexedViewType = IndexedView<Derived, ActualRowIndices, ActualColIndices>;
- using ConstIndexedViewType = IndexedView<const Derived, ActualRowIndices, ActualColIndices>;
- using ReturnType = typename internal::traits<IndexedViewType>::BlockType;
- using ConstReturnType = typename internal::traits<ConstIndexedViewType>::BlockType;
- using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
- using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
-
- static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
- auto actualRowIndices = derived.ivcRow(rowIndices);
- auto actualColIndices = derived.ivcCol(colIndices);
- return ReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
- RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
- }
- static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
- const ColIndices& colIndices) {
- auto actualRowIndices = derived.ivcRow(rowIndices);
- auto actualColIndices = derived.ivcCol(colIndices);
- return ConstReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
- RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
- }
-};
-
-// Scalar
-template <typename RowIndices, typename ColIndices>
-struct IndexedViewSelector<RowIndices, ColIndices,
- std::enable_if_t<internal::traits<
- IndexedView<Derived, IvcRowType<RowIndices>, IvcColType<ColIndices>>>::ReturnAsScalar>> {
- using ReturnType = typename DenseBase<Derived>::Scalar&;
- using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
- using ActualRowIndices = IvcRowType<RowIndices>;
- using ActualColIndices = IvcColType<ColIndices>;
- using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
- using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
- static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
- auto actualRowIndices = derived.ivcRow(rowIndices);
- auto actualColIndices = derived.ivcCol(colIndices);
- return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
- }
- static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
- const ColIndices& colIndices) {
- auto actualRowIndices = derived.ivcRow(rowIndices);
- auto actualColIndices = derived.ivcCol(colIndices);
- return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
- }
-};
-
-// this helper class assumes internal::is_valid_index_type<Indices>::value == false
-template <typename Indices, typename EnableIf = void>
-struct VectorIndexedViewSelector;
-
-// Generic
-template <typename Indices>
-struct VectorIndexedViewSelector<
- Indices, std::enable_if_t<!internal::is_single_range<IvcSizeType<Indices>>::value &&
- internal::IndexedViewHelper<IvcSizeType<Indices>>::IncrAtCompileTime != 1>> {
- static constexpr bool IsRowMajor = DenseBase<Derived>::IsRowMajor;
- using ZeroIndex = internal::SingleRange<Index(0)>;
- using RowMajorReturnType = IndexedView<Derived, ZeroIndex, IvcSizeType<Indices>>;
- using ConstRowMajorReturnType = IndexedView<const Derived, ZeroIndex, IvcSizeType<Indices>>;
-
- using ColMajorReturnType = IndexedView<Derived, IvcSizeType<Indices>, ZeroIndex>;
- using ConstColMajorReturnType = IndexedView<const Derived, IvcSizeType<Indices>, ZeroIndex>;
-
- using ReturnType = typename internal::conditional<IsRowMajor, RowMajorReturnType, ColMajorReturnType>::type;
- using ConstReturnType =
- typename internal::conditional<IsRowMajor, ConstRowMajorReturnType, ConstColMajorReturnType>::type;
-
- template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
- static inline RowMajorReturnType run(Derived& derived, const Indices& indices) {
- return RowMajorReturnType(derived, ZeroIndex(0), derived.ivcCol(indices));
- }
- template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
- static inline ConstRowMajorReturnType run(const Derived& derived, const Indices& indices) {
- return ConstRowMajorReturnType(derived, ZeroIndex(0), derived.ivcCol(indices));
- }
- template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
- static inline ColMajorReturnType run(Derived& derived, const Indices& indices) {
- return ColMajorReturnType(derived, derived.ivcRow(indices), ZeroIndex(0));
- }
- template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
- static inline ConstColMajorReturnType run(const Derived& derived, const Indices& indices) {
- return ConstColMajorReturnType(derived, derived.ivcRow(indices), ZeroIndex(0));
- }
-};
-
-// Block
-template <typename Indices>
-struct VectorIndexedViewSelector<
- Indices, std::enable_if_t<!internal::is_single_range<IvcSizeType<Indices>>::value &&
- internal::IndexedViewHelper<IvcSizeType<Indices>>::IncrAtCompileTime == 1>> {
- using Helper = internal::IndexedViewHelper<IvcSizeType<Indices>>;
- using ReturnType = VectorBlock<Derived, Helper::SizeAtCompileTime>;
- using ConstReturnType = VectorBlock<const Derived, Helper::SizeAtCompileTime>;
- static inline ReturnType run(Derived& derived, const Indices& indices) {
- auto actualIndices = derived.ivcSize(indices);
- return ReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
- }
- static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
- auto actualIndices = derived.ivcSize(indices);
- return ConstReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
- }
-};
-
-// Symbolic
-template <typename Indices>
-struct VectorIndexedViewSelector<Indices, std::enable_if_t<internal::is_single_range<IvcSizeType<Indices>>::value>> {
- using ReturnType = typename DenseBase<Derived>::Scalar&;
- using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
- using Helper = internal::IndexedViewHelper<IvcSizeType<Indices>>;
- static inline ReturnType run(Derived& derived, const Indices& indices) {
- auto actualIndices = derived.ivcSize(indices);
- return derived(Helper::first(actualIndices));
- }
- static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
- auto actualIndices = derived.ivcSize(indices);
- return derived(Helper::first(actualIndices));
- }
-};
-
// SFINAE dummy types
template <typename RowIndices, typename ColIndices>
@@ -210,24 +32,26 @@
// non-const versions
-template <typename RowIndices, typename ColIndices>
-using IndexedViewType = typename IndexedViewSelector<RowIndices, ColIndices>::ReturnType;
+ template <typename RowIndices, typename ColIndices>
+ using IndexedViewType = typename internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::ReturnType;
-template <typename RowIndices, typename ColIndices, EnableOverload<RowIndices, ColIndices> = true>
-IndexedViewType<RowIndices, ColIndices> operator()(const RowIndices& rowIndices, const ColIndices& colIndices) {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), rowIndices, colIndices);
-}
+ template <typename RowIndices, typename ColIndices, EnableOverload<RowIndices, ColIndices> = true>
+ IndexedViewType<RowIndices, ColIndices> operator()(const RowIndices& rowIndices, const ColIndices& colIndices) {
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), rowIndices, colIndices);
+ }
template <typename RowType, size_t RowSize, typename ColIndices, typename RowIndices = Array<RowType, RowSize, 1>,
EnableOverload<RowIndices, ColIndices> = true>
IndexedViewType<RowIndices, ColIndices> operator()(const RowType (&rowIndices)[RowSize], const ColIndices& colIndices) {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices}, colIndices);
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices},
+ colIndices);
}
template <typename RowIndices, typename ColType, size_t ColSize, typename ColIndices = Array<ColType, ColSize, 1>,
EnableOverload<RowIndices, ColIndices> = true>
IndexedViewType<RowIndices, ColIndices> operator()(const RowIndices& rowIndices, const ColType (&colIndices)[ColSize]) {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), rowIndices, ColIndices{colIndices});
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), rowIndices,
+ ColIndices{colIndices});
}
template <typename RowType, size_t RowSize, typename ColType, size_t ColSize,
@@ -235,32 +59,35 @@
EnableOverload<RowIndices, ColIndices> = true>
IndexedViewType<RowIndices, ColIndices> operator()(const RowType (&rowIndices)[RowSize],
const ColType (&colIndices)[ColSize]) {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices}, ColIndices{colIndices});
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices},
+ ColIndices{colIndices});
}
// const versions
template <typename RowIndices, typename ColIndices>
-using ConstIndexedViewType = typename IndexedViewSelector<RowIndices, ColIndices>::ConstReturnType;
+using ConstIndexedViewType = typename internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::ConstReturnType;
template <typename RowIndices, typename ColIndices, EnableConstOverload<RowIndices, ColIndices> = true>
ConstIndexedViewType<RowIndices, ColIndices> operator()(const RowIndices& rowIndices,
const ColIndices& colIndices) const {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), rowIndices, colIndices);
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), rowIndices, colIndices);
}
template <typename RowType, size_t RowSize, typename ColIndices, typename RowIndices = Array<RowType, RowSize, 1>,
EnableConstOverload<RowIndices, ColIndices> = true>
ConstIndexedViewType<RowIndices, ColIndices> operator()(const RowType (&rowIndices)[RowSize],
const ColIndices& colIndices) const {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices}, colIndices);
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices},
+ colIndices);
}
template <typename RowIndices, typename ColType, size_t ColSize, typename ColIndices = Array<ColType, ColSize, 1>,
EnableConstOverload<RowIndices, ColIndices> = true>
ConstIndexedViewType<RowIndices, ColIndices> operator()(const RowIndices& rowIndices,
const ColType (&colIndices)[ColSize]) const {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), rowIndices, ColIndices{colIndices});
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), rowIndices,
+ ColIndices{colIndices});
}
template <typename RowType, size_t RowSize, typename ColType, size_t ColSize,
@@ -268,7 +95,8 @@
EnableConstOverload<RowIndices, ColIndices> = true>
ConstIndexedViewType<RowIndices, ColIndices> operator()(const RowType (&rowIndices)[RowSize],
const ColType (&colIndices)[ColSize]) const {
- return IndexedViewSelector<RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices}, ColIndices{colIndices});
+ return internal::IndexedViewSelector<Derived, RowIndices, ColIndices>::run(derived(), RowIndices{rowIndices},
+ ColIndices{colIndices});
}
// Public API for 1D vectors/arrays
@@ -276,37 +104,37 @@
// non-const versions
template <typename Indices>
-using VectorIndexedViewType = typename VectorIndexedViewSelector<Indices>::ReturnType;
+using VectorIndexedViewType = typename internal::VectorIndexedViewSelector<Derived, Indices>::ReturnType;
template <typename Indices, EnableVectorOverload<Indices> = true>
VectorIndexedViewType<Indices> operator()(const Indices& indices) {
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
- return VectorIndexedViewSelector<Indices>::run(derived(), indices);
+ return internal::VectorIndexedViewSelector<Derived, Indices>::run(derived(), indices);
}
template <typename IndexType, size_t Size, typename Indices = Array<IndexType, Size, 1>,
EnableVectorOverload<Indices> = true>
VectorIndexedViewType<Indices> operator()(const IndexType (&indices)[Size]) {
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
- return VectorIndexedViewSelector<Indices>::run(derived(), Indices{indices});
+ return internal::VectorIndexedViewSelector<Derived, Indices>::run(derived(), Indices{indices});
}
// const versions
template <typename Indices>
-using ConstVectorIndexedViewType = typename VectorIndexedViewSelector<Indices>::ConstReturnType;
+using ConstVectorIndexedViewType = typename internal::VectorIndexedViewSelector<Derived, Indices>::ConstReturnType;
template <typename Indices, EnableConstVectorOverload<Indices> = true>
ConstVectorIndexedViewType<Indices> operator()(const Indices& indices) const {
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
- return VectorIndexedViewSelector<Indices>::run(derived(), indices);
+ return internal::VectorIndexedViewSelector<Derived, Indices>::run(derived(), indices);
}
template <typename IndexType, size_t Size, typename Indices = Array<IndexType, Size, 1>,
EnableConstVectorOverload<Indices> = true>
ConstVectorIndexedViewType<Indices> operator()(const IndexType (&indices)[Size]) const {
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
- return VectorIndexedViewSelector<Indices>::run(derived(), Indices{indices});
+ return internal::VectorIndexedViewSelector<Derived, Indices>::run(derived(), Indices{indices});
}
#else // EIGEN_PARSED_BY_DOXYGEN
diff --git a/test/indexed_view.cpp b/test/indexed_view.cpp
index f165e8b..1f1e808 100644
--- a/test/indexed_view.cpp
+++ b/test/indexed_view.cpp
@@ -447,7 +447,7 @@
// Check compilation of varying integer types as index types:
Index i = n / 2;
- short i_short(i);
+ short i_short = static_cast<short>(i);
std::size_t i_sizet(i);
VERIFY_IS_EQUAL(a(i), a.coeff(i_short));
VERIFY_IS_EQUAL(a(i), a.coeff(i_sizet));
@@ -812,7 +812,7 @@
{
std::vector<int> ind{4, 2, 5, 5, 3};
auto slice1 = A(all, ind);
- for (int i = 0; i < ind.size(); ++i) {
+ for (size_t i = 0; i < ind.size(); ++i) {
VERIFY_IS_EQUAL(slice1.col(i), A.col(ind[i]));
}