mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-07-08 22:21:49 +08:00
ensure that eigen::internal::size is not found by ADL, rename to ssize and...
(cherry picked from commit 9210e71fb378a0f1542272506dc2759b6c147237)
This commit is contained in:
parent
3af8c262ac
commit
bd72e4a8c4
@ -122,10 +122,10 @@ public:
|
||||
{}
|
||||
|
||||
/** \returns number of rows */
|
||||
Index rows() const { return internal::size(m_rowIndices); }
|
||||
Index rows() const { return internal::index_list_size(m_rowIndices); }
|
||||
|
||||
/** \returns number of columns */
|
||||
Index cols() const { return internal::size(m_colIndices); }
|
||||
Index cols() const { return internal::index_list_size(m_colIndices); }
|
||||
|
||||
/** \returns the nested expression */
|
||||
const typename internal::remove_all<XprType>::type&
|
||||
|
@ -466,20 +466,33 @@ template<typename T, std::size_t N> struct array_size<std::array<T,N> > {
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
/** \internal
|
||||
* Analogue of the std::size free function.
|
||||
* It returns the size of the container or view \a x of type \c T
|
||||
* Analogue of the std::ssize free function.
|
||||
* It returns the signed size of the container or view \a x of type \c T
|
||||
*
|
||||
* It currently supports:
|
||||
* - any types T defining a member T::size() const
|
||||
* - plain C arrays as T[N]
|
||||
*
|
||||
* For C++20, this function just forwards to `std::ssize`, or any ADL discoverable `ssize` function.
|
||||
*/
|
||||
template<typename T>
|
||||
EIGEN_CONSTEXPR Index size(const T& x) { return x.size(); }
|
||||
#if EIGEN_COMP_CXXVER < 20
|
||||
template <typename T>
|
||||
EIGEN_CONSTEXPR auto index_list_size(const T& x) {
|
||||
using R = std::common_type_t<std::ptrdiff_t, std::make_signed_t<decltype(x.size())>>;
|
||||
return static_cast<R>(x.size());
|
||||
}
|
||||
|
||||
template<typename T,std::size_t N>
|
||||
EIGEN_CONSTEXPR Index size(const T (&) [N]) { return N; }
|
||||
template<typename T, std::ptrdiff_t N>
|
||||
EIGEN_CONSTEXPR std::ptrdiff_t index_list_size(const T (&)[N]) { return N; }
|
||||
#else
|
||||
template <typename T>
|
||||
EIGEN_CONSTEXPR auto index_list_size(T&& x) {
|
||||
using std::ssize;
|
||||
return ssize(std::forward<T>(x));
|
||||
}
|
||||
#endif // EIGEN_COMP_CXXVER
|
||||
|
||||
/** \internal
|
||||
* Convenient struct to get the result type of a nullary, unary, binary, or
|
||||
|
@ -90,8 +90,8 @@ operator()(const RowIndices& rowIndices, const ColIndices& colIndices) EIGEN_IND
|
||||
return BlockType(derived(),
|
||||
internal::first(actualRowIndices),
|
||||
internal::first(actualColIndices),
|
||||
internal::size(actualRowIndices),
|
||||
internal::size(actualColIndices));
|
||||
internal::index_list_size(actualRowIndices),
|
||||
internal::index_list_size(actualColIndices));
|
||||
}
|
||||
|
||||
// The following overload returns a Scalar
|
||||
@ -168,7 +168,7 @@ operator()(const Indices& indices) EIGEN_INDEXED_VIEW_METHOD_CONST
|
||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
||||
typename IvcType<Indices>::type actualIndices = ivcSize(indices);
|
||||
return VectorBlock<EIGEN_INDEXED_VIEW_METHOD_CONST Derived,internal::array_size<Indices>::value>
|
||||
(derived(), internal::first(actualIndices), internal::size(actualIndices));
|
||||
(derived(), internal::first(actualIndices), internal::index_list_size(actualIndices));
|
||||
}
|
||||
|
||||
template<typename IndexType>
|
||||
|
Loading…
x
Reference in New Issue
Block a user