mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Propagate compile-time size with "all" and add c++11 array unit test
This commit is contained in:
@@ -159,16 +159,16 @@ span(FirstType first, SizeType size) {
|
||||
|
||||
namespace internal {
|
||||
|
||||
template<typename T, typename EnableIf = void> struct get_compile_time_size {
|
||||
template<typename T, int XprSize, typename EnableIf = void> struct get_compile_time_size {
|
||||
enum { value = -1 };
|
||||
};
|
||||
|
||||
template<typename T> struct get_compile_time_size<T,typename internal::enable_if<((T::SizeAtCompileTime&0)==0)>::type> {
|
||||
template<typename T, int XprSize> struct get_compile_time_size<T,XprSize,typename internal::enable_if<((T::SizeAtCompileTime&0)==0)>::type> {
|
||||
enum { value = T::SizeAtCompileTime };
|
||||
};
|
||||
|
||||
#ifdef EIGEN_HAS_CXX11
|
||||
template<typename T,int N> struct get_compile_time_size<std::array<T,N> > {
|
||||
template<typename T, int XprSize, int N> struct get_compile_time_size<std::array<T,N>,XprSize> {
|
||||
enum { value = N };
|
||||
};
|
||||
#endif
|
||||
@@ -250,6 +250,10 @@ AllRange make_indexing(all_t , Index size) {
|
||||
return AllRange(size);
|
||||
}
|
||||
|
||||
template<int XprSize> struct get_compile_time_size<AllRange,XprSize> {
|
||||
enum { value = XprSize };
|
||||
};
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
} // end namespace Eigen
|
||||
|
||||
@@ -19,8 +19,8 @@ struct traits<IndexedView<XprType, RowIndices, ColIndices> >
|
||||
: traits<XprType>
|
||||
{
|
||||
enum {
|
||||
RowsAtCompileTime = get_compile_time_size<RowIndices>::value,
|
||||
ColsAtCompileTime = get_compile_time_size<ColIndices>::value,
|
||||
RowsAtCompileTime = get_compile_time_size<RowIndices,traits<XprType>::RowsAtCompileTime>::value,
|
||||
ColsAtCompileTime = get_compile_time_size<ColIndices,traits<XprType>::ColsAtCompileTime>::value,
|
||||
MaxRowsAtCompileTime = RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime) : int(traits<XprType>::MaxRowsAtCompileTime),
|
||||
MaxColsAtCompileTime = ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime) : int(traits<XprType>::MaxColsAtCompileTime),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user