mirror of
https://gitlab.com/libeigen/eigen.git
synced 2024-12-21 07:19:46 +08:00
Merged in ezhulenev/eigen-02 (pull request PR-501)
Enable DSizes type promotion with c++03
This commit is contained in:
commit
400512bfad
@ -477,6 +477,18 @@ class Tensor : public TensorBase<Tensor<Scalar_, NumIndices_, Options_, IndexTyp
|
||||
// Nothing to do: rank 0 tensors have fixed size
|
||||
}
|
||||
|
||||
#ifdef EIGEN_HAS_INDEX_LIST
|
||||
template <typename FirstType, typename... OtherTypes>
|
||||
EIGEN_DEVICE_FUNC
|
||||
void resize(const Eigen::IndexList<FirstType, OtherTypes...>& dimensions) {
|
||||
array<Index, NumIndices> dims;
|
||||
for (int i = 0; i < NumIndices; ++i) {
|
||||
dims[i] = static_cast<Index>(dimensions[i]);
|
||||
}
|
||||
resize(dims);
|
||||
}
|
||||
#endif
|
||||
|
||||
/** Custom Dimension */
|
||||
#ifdef EIGEN_HAS_SFINAE
|
||||
template<typename CustomDimension,
|
||||
|
@ -290,22 +290,24 @@ struct DSizes : array<DenseIndex, NumDims> {
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef EIGEN_HAS_CXX11
|
||||
// Enable DSizes index type promotion only if we are promoting to the
|
||||
// larger type, e.g. allow to promote dimensions of type int to long.
|
||||
template<typename OtherIndex,
|
||||
typename std::enable_if<
|
||||
std::is_same<
|
||||
DenseIndex,
|
||||
typename internal::promote_index_type<DenseIndex, OtherIndex>::type
|
||||
>::value, int>::type = 0>
|
||||
template<typename OtherIndex>
|
||||
EIGEN_DEVICE_FUNC
|
||||
explicit DSizes(const array<OtherIndex, NumDims>& other) {
|
||||
explicit DSizes(const array<OtherIndex, NumDims>& other,
|
||||
// Default template parameters require c++11.
|
||||
typename internal::enable_if<
|
||||
internal::is_same<
|
||||
DenseIndex,
|
||||
typename internal::promote_index_type<
|
||||
DenseIndex,
|
||||
OtherIndex
|
||||
>::type
|
||||
>::value, void*>::type = 0) {
|
||||
for (int i = 0; i < NumDims; ++i) {
|
||||
(*this)[i] = static_cast<DenseIndex>(other[i]);
|
||||
}
|
||||
}
|
||||
#endif // EIGEN_HAS_CXX11
|
||||
|
||||
#ifdef EIGEN_HAS_INDEX_LIST
|
||||
template <typename FirstType, typename... OtherTypes>
|
||||
|
@ -61,9 +61,11 @@ static void test_rank_zero()
|
||||
}
|
||||
|
||||
static void test_index_type_promotion() {
|
||||
#ifdef EIGEN_HAS_CXX11
|
||||
Eigen::DSizes<int, 3> src0(1, 2, 3);
|
||||
Eigen::array<int, 3> src1 = {4, 5, 6};
|
||||
Eigen::array<int, 3> src1;
|
||||
src1[0] = 4;
|
||||
src1[1] = 5;
|
||||
src1[2] = 6;
|
||||
|
||||
Eigen::DSizes<long, 3> dst0(src0);
|
||||
Eigen::DSizes<long, 3> dst1(src1);
|
||||
@ -74,7 +76,6 @@ static void test_index_type_promotion() {
|
||||
VERIFY_IS_EQUAL(dst1[0], 4L);
|
||||
VERIFY_IS_EQUAL(dst1[1], 5L);
|
||||
VERIFY_IS_EQUAL(dst1[2], 6L);
|
||||
#endif // EIGEN_HAS_CXX11
|
||||
}
|
||||
|
||||
EIGEN_DECLARE_TEST(cxx11_tensor_dimension)
|
||||
|
Loading…
Reference in New Issue
Block a user